版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第四章 類 和 對 象,教學目標,理解數據抽象和數據隱藏 創(chuàng)建類 能夠創(chuàng)建和使用對象 能夠控制對實例變量和方法的訪問 方法的重載 構造函數的使用 理解this引用的用法 理解Java的垃圾收集機制 static方法和域的使用 類的組合 包的創(chuàng)建和使用,4.1 面向對象程序設計的思想,4.1.1 OOP思想 4.1.2 用類實現抽象數據類型:時鐘類 4.1.3 類成員:構造函數、方法和域,4.1.1 OOP思想,面向對象編程技術 將數據及對數據的操作封裝在一起而形成了類,類是描述相同類型的對象集合。 。面向對象編程(object-oriented programming,OOP)就是定義這些類。
2、 類作為抽象的數據類型用于創(chuàng)建類的對象。 程序的執(zhí)行,表現為一組對象之間的交互通信。對象之間通過公共接口進行通信,從而完成系統(tǒng)功能。對象的公共接口是該對象的應用程序編程接口(Application Programming Interface,API),把對象的內部詳細信息隱藏起來,使得對象變得抽象,將這種技術稱為數據的抽象化。 Java語言是完全面向對象的語言,程序的結構由一個以上的類組成。所有的過程都被封裝起來,并將它們稱之為方法。,4.1.2 用類實現抽象數據類型:時鐘類,類作為一種抽象的數據類型,封裝了對象的數據屬性和動態(tài)行為,被用來定義類的對象。 下面我們將通過一個具體的實例來理解什么
3、是類,如何定義類、創(chuàng)建對象和使用對象。 時鐘類的設計: (1) 數據屬性: 時(int hour); 分 (int minute); 秒(int second)。 (2) 行為: 設置時間 setTime() ; 顯示時間 toUniversalString() 、 toStandardString() ; 走時 (暫時不考慮);,4.1.2 用類實現抽象數據類型:時鐘類(續(xù)),例4-1 時鐘類的實現。 該例子包含兩個文件Time1.java和TimeTest1.java。 Time1.java是用于定義時鐘類。 TimeTest1類是一個用于測試時鐘類的包含main方法的主類,在main方法
4、中將創(chuàng)建Time1類的一個對象,并調用對象的公共方法。,4.1.2 用類實現抽象數據類型:時鐘類(續(xù)),Time1.java文件的代碼如下: import java.text.DecimalFormat; public class Time1 extends Object private int hour; private int minute; private int second; public Time1() setTime( 0, 0, 0 ); public void setTime( int h, int m, int s ) hour = ( ( h = 0 ,時,分,秒,設置時
5、間,4.1.2 用類實現抽象數據類型:時鐘類(續(xù)),public String toUniversalString() /toUniversalString方法以24時制格式顯示時間 DecimalFormat twoDigits = new DecimalFormat( 00 ); return twoDigits.format( hour ) + : + twoDigits.format( minute ) + : + twoDigits.format( second ); public String toStandardString() /toStandardString方法以12時制格
6、式顯示時間 DecimalFormat twoDigits = new DecimalFormat( 00 ); return ( (hour = 12 | hour = 0) ? 12 : hour % 12 ) + : + twoDigits.format( minute ) + : + twoDigits.format( second ) + ( hour 12 ? AM : PM ); ,以24時制格式顯示時間,以12時制格式顯示時間,4.1.2 用類實現抽象數據類型:時鐘類(續(xù)),TimeTest1.java文件的代碼: /TimeTest1.java import javax.sw
7、ing.JOptionPane; public class TimeTest1 public static void main( String args ) Time1 time = new Time1(); String output = The initial universal time is: + time.toUniversalString() + nThe initial standard time is: + time.toStandardString(); time.setTime( 13, 27, 6 ); output += nnUniversal time after s
8、etTime is: + time.toUniversalString() + nStandard time after setTime is: + time.toStandardString(); time.setTime( 99, 99, 99 ); output += nnAfter attempting invalid settings: + nUniversal time: + time.toUniversalString() + nStandard time: + time.toStandardString(); JOptionPane.showMessageDialog( nul
9、l, output, 時鐘類測試, JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); ,創(chuàng)建Time1類的對象time,調用時鐘類的toUniversalString()方法,調用時鐘類的toStandardString()方法,4.1.2 用類實現抽象數據類型:時鐘類(續(xù)),程序運行的結果為:,4.1.3 類成員:構造函數、方法和域,定義類的語法格式如下: 類的修飾符 class 類名 extends 父類名 /類體 ,1域 一個類的數據屬性由它的成員變量(域field)定義。在類中聲明一個域的形式為: 域修飾符 類型 域名;,4.1.
10、3 類成員:構造函數、方法和域 (續(xù)),2. 方法 方法一般是對類中的數據成員進行操作。如果類中的數據成員是private型的,則往往定義一個public的方法來設置數據成員的值或讀取數據成員的值。 3. 構造函數 Time1類包含一個構造函數Time1(),構造函數的名和類名是一樣的。構造函數一般用于初始化某個類的對象。在程序創(chuàng)建Time1類的對象時,new運算符為該對象分配內存,并調用構造函數來初始化該對象,也就是通過調用Time1類的構造函數,在構造函數中給對象的各成員變量賦初值。,4.1.3 類成員:構造函數、方法和域(續(xù)),4.2 類的作用域,Java中用于定義類的作用域的修飾符有兩
11、個: public(公共作用域):一個具有公共作用域的類在封裝它的包外面是可見的; package(包作用域):一個具有包作用域的類只是在封裝它的包中是可見的。如果一個類聲明的前面沒有public關鍵字,則此類默認為包作用域。 例如: class C1 /成員 public class C2 /成員 ,例如: package examplePkg1; class C3 /成員 package examplePkg2; class C4 /成員 ,4.2 類的作用域(續(xù)),4.2 類的作用域(續(xù)),假如在C4類聲明的前面加上public,如下所示: package examplePkg2; pu
12、blic class C4 /成員 ,4.3 成員訪問控制,成員訪問控制是用來控制類中成員的訪問范圍,由修飾符聲明。表4-1列出了常見的成員訪問控制修飾符。,表4-1 成員訪問控制修飾符,例4-2 成員訪問控制示例,4.4 方法,4.4.1 方法的聲明與局部變量 4.4.2 方法的參數傳遞 4.4.3 使用set和get方法 4.4.4 方法重載(overloading),4.4.1 方法的聲明與局部變量,方法聲明的格式為: 修飾符 返回類型 方法名(形式參數表) /方法體 ,方法聲明中的符號含義: 修飾符:方法訪問控制常見的有public、protected和privated。 返回類型:一
13、個方法必須聲明其返回類型,如果無返回值,則必須聲明其返回類型為void。一個方法可以返回簡單數據類型或任何引用類型的值,也可以返回任何類的對象。一個方法通過return語句返回并將返回值緊跟return語句之后。如果一個方法返回類型為void。這個方法也必須包含一個return語句,只是在return語句之后不再帶有返回值。 方法名可以是任何合法的Java標識符。 形式參數:當編寫一個方法時,要聲明該方法所需要的若干參數和這些參數的類型。這是在聲明一個方法時,通過列出它的參數表來完成的。參數表指明每個參數的名字和類型,各參數之間用逗號分開。在方法體中,可以直接用這些參數名來引用參數的值。,4.
14、4.1 方法的聲明與局部變量(續(xù)),4.4.1 方法的聲明與局部變量(續(xù)),方法體:方法體中包含了實現這個方法具體功能的代碼。 方法體中聲明的變量,只在方法內使用。即它們是該方法的局部變量。 如果方法聲明的局部變量與封裝該方法的類所聲明的一個實例變量同名,則在該方法的作用域中,局部變量屏蔽實例變量。若要在該方法中訪問被屏蔽的實例變量,可在其名稱前加上關鍵字this和點運算符(),形式為: this.變量名;,4.4.1 方法的聲明與局部變量(續(xù)),例如: class C1 int i; method1() int i=0; int j; this.i=i+10; j=5; ,實例變量i,局部變
15、量i,通過this.i調用實例變量i,取局部變量i的值,4.4.2 方法的參數傳遞,Java的參數傳遞方式是通過值來傳遞的,也稱為“值傳遞”。對于這種值傳遞要區(qū)分如下兩種情況: 當方法的參數為簡單數據類型時,則將實參的值傳遞給形參; 當方法的參數為復合數據類型(對象)時,則將實參的地址傳給形參。,4.4.3 使用set和get方法,如果類中聲明了private成員變量,則只能通過該類的方法來操作這些成員變量。類常常提供公有方法以允許該類的用戶設置或者讀取private實例變量。 例4-3 set和get方法的使用,4.4.4 方法重載(overloading),Java支持方法的重載,方法的重
16、載定義為在一個類中定義多個同名的方法。下面舉例說明方法的重載。 要注意到重載的方法參數必須有所區(qū)別: 參數的類型不同。 參數的順序不同。這里是指一個方法有多個不同類型參數的情況,改變參數的順序,也算是一種區(qū)分方法。 參數的個數不同。如例子中的三個重載的方法參數的個數分別是一個、兩個和三個。,4.4.4 方法重載(overloading)(續(xù)),例4-4 方法的重載 Time3.java文件的部分代碼: /三個重載的setTime方法 public void setTime(int h) setTime(h,0,0); public void setTime(int h,int m) setTi
17、me(h,m,0); public void setTime( int h, int m, int s ) hour = ( ( h = 0 ,帶有一個參數的setTime方法,帶有兩個參數的setTime方法,帶有三個參數的setTime方法,4.5 初始化類的對象:構造函數,構造方法用于為類的新建的對象分配內存空間和進行初始化,如例4-1在Time1類中創(chuàng)建了一個構造函數(不帶任何參數)。在構造函數中對三個成員變量進行了初始化。構造函數只能在創(chuàng)建對象時用new命令調用。定義必須構造函數時,注意兩點: 構造方法必須與其類名相同; 構造方法沒有返回值,但可以有參數,并且可以重載。,4.5 初始
18、化類的對象:構造函數(續(xù)),例4-5舉例說明構造函數的重載。 Time4.java文件的部分代碼: /5個重載的構造函數 public Time4() setTime( 0, 0, 0 ); public Time4( int h ) setTime( h, 0, 0 ); public Time4( int h, int m ) setTime( h, m, 0 ); public Time4( int h, int m, int s ) setTime( h, m, s ); public Time4( Time4 time ) setTime( time.hour, time.minut
19、e, time.second ); ,不帶參數的構造函數,帶一個參數的構造函數,帶兩個參數的構造函數,帶三個參數的構造函數,帶一個參數為對象的構造函數,4.6 this,this定義為被調用的方法的當前對象的引用。this引用僅能出現在類中的方法中。 例4-6 this的使用 例子說明如何隱式地和顯式地使用this引用。 例子中SimpleTime類的構造方法的三個參數名與SimpleTime類三個成員變量名相同。在這種情況下,局部變量在該方法作用域中屏蔽了同名的域。我們可以使用this來顯式地引用屏蔽的域。通過this不但可以引用成員變量,也可通過this引用方法,包括構造函數。本例子中通過
20、this引用方法。,4.7 垃圾收集,Java平臺允許創(chuàng)建任意個對象(當然會受到系統(tǒng)資源的限制),而且當對象不再使用時自動會被清除,這個過程就是所謂的“垃圾收集”。當對象不再被引用的時候,對象就會被作為垃圾收集的對象而清除。為了使對象不再被引用,可以通過設置執(zhí)行指向某一對象的引用為null。例如: Time1 time=new Time1(); Time=null; 1垃圾收集器 2撤銷方法finalize,4.8 static方法和域,當聲明一個成員變量時,可以指定成員變量是屬于一個類的所有對象共享static (稱為類的變量),還是屬于一個類的各個對象所擁有( 稱為實例變量,是類的實例擁有)。類的變量又稱為靜態(tài)成員,以關鍵字static聲明。 例如: static int count; 類的靜態(tài)成員的使用格式一般為: 類名.靜態(tài)變量名; 類名.靜態(tài)方法名(); 例4-7 靜態(tài)方法和域的應用,4.9 類的組合,一個類中的成員可以是其他類的引用,這叫類的組合。 例4-8 類的組合,4.10 包的創(chuàng)建和訪問,4.10.1 包的創(chuàng)建 4.10.2 包的使用,4.10.1 包的創(chuàng)建,建立一個包時,使用package語句。package語句必須是整個java文件的第一個語句。創(chuàng)建pa
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)學倫理教育實踐與反思總結
- 手術室護理操作規(guī)范與細節(jié)
- 醫(yī)療溝通:有效表達與尊重
- 生物醫(yī)學光學成像技術的創(chuàng)新與應用
- 兒童護理心理輔導策略
- 護理質量評估與改進工具介紹
- 兒科診療服務滿意度提升分析
- 醫(yī)療行業(yè)創(chuàng)新項目投資與退出
- 2026年湖北生物科技職業(yè)學院高職單招職業(yè)適應性考試備考題庫有答案解析
- 兒童保健項目成果展示
- 2025年國家基本公共衛(wèi)生服務考試試題(附答案)
- 2025年濟寧職業(yè)技術學院毛澤東思想和中國特色社會主義理論體系概論期末考試模擬題必考題
- 委托作品協議書
- m的認主協議書
- 2025年及未來5年市場數據中國機電安裝工程市場調查研究及行業(yè)投資潛力預測報告
- kv高壓線防護施工方案
- 住建局執(zhí)法證考試題庫及答案2025
- 主管護師聘任述職報告
- AI搜索時代:從GEO到AIBE的品牌新藍圖
- 產品知識培訓會議總結
- 專題11 圓(安徽專用)5年(2021-2025)中考1年模擬《數學》真題分類匯編
評論
0/150
提交評論