第四章 對(duì)象和類(lèi)
1.面向?qū)ο蟮某绦蚴怯蓪?duì)象組成,每個(gè)對(duì)象包含對(duì)用戶(hù)公開(kāi)的特定功能部分和隱藏的實(shí)現(xiàn)部分拗盒。
2.類(lèi) :實(shí)例域(數(shù)據(jù)) + (操作數(shù)據(jù)的)方法
3.封裝 :絕不讓類(lèi)中的方法直接訪問(wèn)其他類(lèi)的實(shí)例域 “黑盒“特征-----提高了重用性和可靠性也就是在同樣的處理方法下,只需要改變存儲(chǔ)數(shù)據(jù)的方式就可以痊臭,不需要發(fā)生大的變化
4.類(lèi)之間的關(guān)系
依賴(lài): 類(lèi)A的方法操縱類(lèi)S的對(duì)象 A依賴(lài)于S 應(yīng)盡可能減少依賴(lài)(降低耦合度)
聚合:類(lèi)A的對(duì)象包含類(lèi)S的對(duì)象
繼承: 類(lèi)A擴(kuò)展類(lèi)B 類(lèi)A不但包含從類(lèi)B繼承的方法 還可以有一些新的方法、屬性
5.構(gòu)造器與類(lèi)同名
每個(gè)類(lèi)可以有一個(gè)以上的構(gòu)造器
構(gòu)造器可以有0個(gè)绽左、1個(gè)或1個(gè)以上的參數(shù)
構(gòu)造器沒(méi)有返回值
構(gòu)造器總是伴隨著new操作一起調(diào)用
隱式參數(shù)與顯式參數(shù)
6.私有方法
public -----> private 數(shù)據(jù)一般都為私有的 方法可以公有艇潭,也可以私有
7.Final實(shí)例域
final 基本數(shù)據(jù)類(lèi)型域 或 不可變類(lèi)的域
private final Date hiredate;
意味著存儲(chǔ)在hiredate變量中的對(duì)象引用在對(duì)象構(gòu)造之后不能被改變蹋凝。
任何方法都可以對(duì)hiredate引用的對(duì)象調(diào)用setTime更改器。
8.Main方法 -------靜態(tài)方法
啟動(dòng)程序時(shí)還沒(méi)有任何一個(gè)對(duì)象改含,靜態(tài)的main方法將執(zhí)行并創(chuàng)建程序所需要的對(duì)象
9.方法參數(shù)
參數(shù)傳遞:①迄汛、傳遞的是值(值調(diào)用)、布爾類(lèi)型(true鞍爱、false)
②睹逃、傳遞的是變量地址(引用調(diào)用)
傳遞的值不能改變其內(nèi)容。 只是將值傳遞過(guò)來(lái)沉填。
在Java程序設(shè)計(jì)語(yǔ)言中翼闹,方法參數(shù)的使用情況:
一個(gè)方法不能修改一個(gè)基本數(shù)據(jù)類(lèi)型的參數(shù)(即數(shù)值型和布爾型)
一個(gè)方法不能改變一個(gè)對(duì)象參數(shù)的狀態(tài)
一個(gè)方法不能實(shí)現(xiàn)讓對(duì)象參數(shù)引用一個(gè)新的對(duì)象
11.重載
這種叫做重載 :有相同的名字,但是參數(shù)不同(參數(shù)類(lèi)型坚弱、個(gè)數(shù)不同法牲,且都要指明) 指出方法名以及參數(shù)類(lèi)型------方法的簽名
編譯器根據(jù)所提供的構(gòu)造方法找到與其對(duì)應(yīng)的;若編譯器找不到匹配的或者找到多個(gè),就會(huì)產(chǎn)生編譯時(shí)錯(cuò)誤(該過(guò)程為重載解析)
注意:返回類(lèi)型不是方法簽名的一部分(不能有兩個(gè)名字相同瓷蛙、參數(shù)類(lèi)型也相同卻返回不同類(lèi)型值的方法)
12.默認(rèn)域初始化
若構(gòu)造其中沒(méi)有顯式地進(jìn)行賦值戈毒,那么會(huì)自動(dòng)度為默認(rèn)值:數(shù)值=0埋市,布爾值=false命贴,對(duì)象引用=null
不明確地對(duì)域進(jìn)行初始化,會(huì)影響代碼可讀性
13.默認(rèn)構(gòu)造器
沒(méi)有參數(shù)的構(gòu)造器
若在類(lèi)中沒(méi)有提供任何一個(gè)構(gòu)造器污茵,則系統(tǒng)會(huì)自動(dòng)提供一個(gè)默認(rèn)構(gòu)造器葬项,所有實(shí)力域的值均為默認(rèn)值
注意:若類(lèi)中提供了一個(gè)及以上構(gòu)造器,但是沒(méi)有編寫(xiě)默認(rèn)的構(gòu)造器(也就是無(wú)參的構(gòu)造器)襟士,而在構(gòu)造對(duì)象時(shí)還想使用默認(rèn)的嚷量,則不合法,會(huì)產(chǎn)生錯(cuò)誤
14顯示域初始化
在調(diào)用構(gòu)造器時(shí)章喉,應(yīng)到確保不管怎樣調(diào)用身坐,每個(gè)實(shí)例域都可以被設(shè)置為一個(gè)有意義地初值。
賦初值:初始值是常量的情況
初始值可以不是常量摊唇。調(diào)用方法對(duì)域進(jìn)行初始化
15.參數(shù)名
參數(shù)命名時(shí)技巧:
1涯鲁、在參數(shù)前加上前綴或者后綴之類(lèi)的 , _xxx,(固定字母)xsalary,msalary
2、參數(shù)變量用同樣的名字將實(shí)例域屏蔽起來(lái)
16.調(diào)用構(gòu)造器的具體處理步驟:
1岛请、所有數(shù)據(jù)域被初始化為默認(rèn)值(0警绩、false或null)
2、按照在類(lèi)聲明中出現(xiàn)的次序后室,依次執(zhí)行所有域初始化語(yǔ)句和初始化塊
3、若構(gòu)造器第一行調(diào)用了第二個(gè)構(gòu)造器疾层,則執(zhí)行第二個(gè)構(gòu)造器的主體
4贡避、執(zhí)行這個(gè)構(gòu)造器的主體
17對(duì)象析構(gòu)與finalize方法
析構(gòu)器最常見(jiàn)操作:回收分配給對(duì)象的存儲(chǔ)空間
由于Java有自動(dòng)的垃圾回收器,不需要人工回收內(nèi)存湖饱,所以Java不支持析構(gòu)器
若特殊情況(資源不再需要皇筛,將其回收和再利用),可為類(lèi)添加finalize方法—將在垃圾回收器清除對(duì)象之前調(diào)用旗笔。實(shí)際應(yīng)用中拄踪,因很難知道什么時(shí)候才能調(diào)用,故而不要用這個(gè)方法回收短缺資源 不鼓勵(lì)使用
若某資源需使用完畢后立即關(guān)閉撮弧,則需要人工應(yīng)用類(lèi)似dispose或close的方法來(lái)完成相應(yīng)的清理操作姚糊。
注意:若該類(lèi)使用了這樣的方法,對(duì)象不再使用時(shí)一定要調(diào)用它
18.包
包 用于存放類(lèi) 確保類(lèi)名的唯一性 每個(gè)包之間獨(dú)立
在包中定位類(lèi) 是 編譯器的工作贸辈。
優(yōu)點(diǎn):便于組織代碼肠槽,當(dāng)與被人代碼合并時(shí)方便分開(kāi)管理
Java類(lèi)庫(kù),包括java.lang嘴拢、java.util和java.net等 具有層次結(jié)構(gòu)
所有標(biāo)準(zhǔn)的Java包都處在java和javax包層次中
一個(gè)類(lèi)可使用所屬包中的所有類(lèi)與其他包中的公有類(lèi)
19.文檔注釋
/** 開(kāi)始
這種注釋的方式將代碼和注釋保存在同一文件中寂纪,在代碼修改時(shí),重新運(yùn)行javadoc就可輕而易舉保持二者的一致性
注釋的插入
javadoc實(shí)用程序(utility)在下面特性中抽取信息:
20.包
公有類(lèi)與接口(接口見(jiàn)第六章)
公有的和受保護(hù)的方法(受保護(hù)特性見(jiàn)第五章)
公有的和受保護(hù)的域
注釋?xiě)?yīng)當(dāng)放在所描述特性的前面抢腐。以/*開(kāi)始襟交,/結(jié)束
21.通用注釋
可用在類(lèi)文檔的注釋中:
@author name
產(chǎn)生一個(gè)作者條目捣域。可使用多個(gè)@author標(biāo)記焕梅,每個(gè)@author標(biāo)記對(duì)應(yīng)一個(gè)作者
@version text
產(chǎn)生一個(gè)版本條目。text可以是對(duì)當(dāng)前版本的任何描述
可用于所有文檔的注釋中
22.類(lèi)設(shè)計(jì)技巧
①一定將數(shù)據(jù)設(shè)計(jì)為私有
不要破壞封裝性
可編寫(xiě)訪問(wèn)器方法getXXX或者更改其方法setXXX斜棚,以保持實(shí)例域的私有性
②一定要對(duì)數(shù)據(jù)初始化
Java不對(duì)局部變量進(jìn)行初始化该窗,但對(duì)對(duì)象的實(shí)例域進(jìn)行初始化酗失。
不要依賴(lài)于系統(tǒng)提供的默認(rèn)值,程序員應(yīng)設(shè)置默認(rèn)值或在所有構(gòu)造器中設(shè)置默認(rèn)值
③不要在類(lèi)中使用過(guò)多的基本數(shù)據(jù)類(lèi)型
用其他類(lèi)代替多個(gè)相關(guān)的基本數(shù)據(jù)類(lèi)型的使用捶闸。
④不是所有的域都需要獨(dú)立的域訪問(wèn)器和域更改器
⑤使用標(biāo)準(zhǔn)格式進(jìn)行類(lèi)的定義
23類(lèi)內(nèi)容順序:
1 公有訪問(wèn)特性部分
2 包作用域訪問(wèn)特性部分
3 私有訪問(wèn)特性部分
24每一部分的順序:
1 實(shí)例方法
2 靜態(tài)方法
3 實(shí)例域
4 靜態(tài)域