5.1用構(gòu)造器確保初始化
為了確保安全性,強制在使用前進行初始化
Java構(gòu)造器與類名相同,無參數(shù)構(gòu)造器又叫做默認構(gòu)造器。
5.2 方法重載
method overloading:重載,同名不同參
method overriding:重寫/覆蓋,子類覆蓋父類
5.2.1區(qū)分重載方法
獨一無二的參數(shù)類型表,否則編譯不通過!
5.2.2涉及基本類型的重載
如果參數(shù)類型是int,short,byte,long等,常數(shù)自動定位到int而不會執(zhí)行short,byte
因為默認常數(shù)就是int型,如果沒有int,則會依次向上轉(zhuǎn)型到long,float,double
注意:向上轉(zhuǎn)型不會丟信息,可以自動轉(zhuǎn)型
向下轉(zhuǎn)型會丟失信息,必須強制類型轉(zhuǎn)換
5.2.3以返回值區(qū)分重載方法
不允許。因為可能一個int型方法f()也可以直接調(diào)用而不做任何事情
5.3默認構(gòu)造器
如果不寫構(gòu)造器,編譯器會寫一個無參數(shù)構(gòu)造器,申請內(nèi)存空間
5.4this關(guān)鍵字
發(fā)送消息給對象:編譯器“偷偷”把調(diào)用方法的對象的引用最為參數(shù)傳遞給方法,所以方法知道是哪個對象在調(diào)用它,這個對象的屬性值是多少。要向在方法內(nèi)部獲得當(dāng)前對象的引用,java提供關(guān)鍵字this。this只能在方法內(nèi)部使用,表示對調(diào)用方法的哪個對象的引用。如果方法調(diào)用同一個類的另一個方法,可以省略this(也推薦省略)。
用到this:方法返回當(dāng)前對象,將當(dāng)前對象傳遞給其他方法
5.4.1 在構(gòu)造器中調(diào)用構(gòu)造器
this(***)的方式:將產(chǎn)生對符合次參數(shù)列表的某個構(gòu)造器的明確調(diào)用。必須位于構(gòu)造器首部且只能用一次!
5.4.2static方法的含義
static方法就是沒有this的方法,有全局函數(shù)的語義。
5.5清理:終結(jié)處理finalization和垃圾回收
允許java類定義一個finalize()的方法,在垃圾回收執(zhí)行前調(diào)用,處理一些回收工作。
如果處理垃圾回收器干不了的與內(nèi)存回收無關(guān)的清理工作,則必須手動定義和調(diào)用其它普通的java方法。
5.5.1 finalize()的用途
垃圾回收及其相關(guān)行為finalize只與內(nèi)存回收有關(guān),finalize:通過創(chuàng)建對象的方式以外的方式為對象分配了內(nèi)存。
"本地方法":調(diào)用非java代碼,需要finalize中的本地方法調(diào)用free
5.5.2你必須實施清理
java不允許局部對象,所以沒有析構(gòu)函數(shù),如果需要手動清理工作,則需調(diào)用某個java方法。
垃圾回收只有在jvm內(nèi)存耗盡時才會執(zhí)行,否則在程序結(jié)束時將內(nèi)存直接交回操作系統(tǒng)。
5.5.3終結(jié)條件
finalize()很難用到,但有一個有趣的用法叫做終結(jié)條件驗證???
對象被清理時必須處于某種狀態(tài),否則即使引用丟失,也不能被回收,finalize可以捕獲這種缺陷并進行異常處理!
5.5.4 垃圾回收器如何工作
java的垃圾回收器可以提高對象的創(chuàng)建速度???
java堆分配的速度,甚至可以和其它語言堆棧分配的速度媲美!
java的“堆指針”在分配一個對象后移動到尚未分配的區(qū)域
當(dāng)內(nèi)存耗盡,垃圾回收器介入,回收空間并使堆中的對象緊密排列,避免頁面錯誤。
垃圾回收器原理:自適應(yīng)的,分代的,停止-復(fù)制、標(biāo)記-清掃
5.6成員初始化
保證所有變量在使用前都能得到恰當(dāng)?shù)某跏蓟?/p>
5.6.1指定初始化
在定義類成員變量的地方賦值,每個對象都會具有相同的初始值
5.7構(gòu)造器初始化
5.7.1初始化順序:定義的順序,構(gòu)造器調(diào)用之前其實已經(jīng)完成自動初始化
5.7.2 靜態(tài)數(shù)據(jù)初始化
如果沒有初始化,則會初始化為標(biāo)準(zhǔn)值或null
同樣可以在定義處初始化
靜態(tài)對象先于非靜態(tài)對象初始化,且只初始化一次!P95
5.7.3顯示的靜態(tài)初始化
static{
***
}
5.7.4非靜態(tài)實例初始化
也可以{}定義初始化語句,支持匿名內(nèi)部類
5.8數(shù)組初始化
數(shù)組是相同類型封裝到一起的對象序列或基本類型序列。
編譯器不允許指定數(shù)組的大小(因為沒有為數(shù)組對象分配空間,必須初始化)
內(nèi)容簡單p100-p101
5.8.1可變參數(shù)列表
實質(zhì)上一個隱式的數(shù)組 f(Objcet... args)
使重載方法識別變得復(fù)雜
5.9枚舉類型
新聞熱點
疑難解答