- 初始化和清理正是涉及安全的兩個問題
一、用構(gòu)造器確保初始化
構(gòu)造器:在java中提供構(gòu)造器芹彬,確保每個對象都會得到初始化蓄髓。
在java中“創(chuàng)建”與“初始化”是捆綁在一起的,不能分離舒帮。
構(gòu)造器采用與類相同的名字会喝。
不接受任何參數(shù)的構(gòu)造器叫做,默認構(gòu)造器玩郊。也叫做無參構(gòu)造器肢执。
構(gòu)造器是一種特殊類型的方法,因為它沒有返回值
二译红、方法重載
因為構(gòu)造器只能與類同名预茄,當用多種方式創(chuàng)建一個對象時,則需要多個構(gòu)造器侦厚。
- 為了讓方法名相同而形式參數(shù)不同的構(gòu)造器同時存在耻陕,必須使用方法重載
- 每個重載的方法都必須有一個獨一無二的參數(shù)類型列表。
三刨沦、默認構(gòu)造器
- 如果類中沒有構(gòu)造器诗宣,編譯器會自動創(chuàng)建一個默認構(gòu)造器
四、this關鍵字
- this關鍵字只能在方法內(nèi)部使用想诅,表示對“調(diào)用方法的那個對象”的引用召庞。
- 在一個構(gòu)造器中調(diào)用另一個構(gòu)造器
1、必須在構(gòu)造器最起始處調(diào)用另一個構(gòu)造器侧蘸,且不能調(diào)用2個構(gòu)造器
2裁眯、this調(diào)用構(gòu)造器時鹉梨,只能在構(gòu)造器之內(nèi)調(diào)用 - static方法就是沒有this的方法讳癌,static方法的內(nèi)部不能調(diào)用非靜態(tài)方法,可以通過類本身訪問static方法
五存皂、清理:終結(jié)處理和垃圾回收
- java內(nèi)存中的垃圾回收
1晌坤、對象可能不被垃圾回收
2、垃圾回收并不等于“析構(gòu)”
3旦袋、垃圾回收只與內(nèi)存有關 - java允許定義一個名為finalize()的方法骤菠,它的需求被限制在一種特殊情況:通過某種創(chuàng)建對象方式以外的方式為對象分配了存儲空間。
此情況為在java中調(diào)用非java代碼
六疤孕、成員初始化
- 類的成員變量為基本類型時:會有一個自動初始值商乎。
在定義成員變量時,應該直接提供初始值 - 初始化引用類型的方法
1祭阀、在定義對象的地方
2鹉戚、在類的構(gòu)造器中
3鲜戒、惰性初始化,在使用這對象之前
4抹凳、實例初始化
public class Bath {
private String //在定義對象的地方初始化
s1 = "happy",
s2 = "happy",
s3,s4;
private Soap castille;
private int i;
private float toy;
private Bath(){ //在類的構(gòu)造器中初始化
System.out.println("Inside Bath()");
s3 = "joy";
toy = 3.14f;
castille = new Soap();
}
{ i = 47;} //實例初始化
public String toString(){
if( s4 == null){
s4 = "joy"; //惰性初始化
}
return
"s1 = " + s1 + "\n" +
"s2 = " + s2 + "\n" +
"s3 = " + s3 + "\n" +
"s4 = " + s4 + "\n" +
"i = " + i + "\n" +
"toy = " + toy + "\n" +
"castille = " + castille;
}
public static void main(String[] args) {
Bath b = new Bath();
System.out.println(b);
}
}
七遏餐、構(gòu)造器初始化
-
構(gòu)造器的初始化,無法阻止自動初始化的進行赢底,它將在構(gòu)造器被調(diào)用之前發(fā)生
初始化順序:
1失都、變量定義的先后順序決定了初始化的順序。無論變量定義位于方法何處幸冻,它們?nèi)匀缓笤谌魏畏椒ǎò?gòu)造器)被調(diào)用之前得到初始化
2粹庞、初始化的順序是先靜態(tài)對象,而后是非靜態(tài)對象對象的創(chuàng)建過程: 1嘁扼、查找類路徑信粮,定義 類.class 文件 2、載入 類.class 文件(這將創(chuàng)建一個Class對象)趁啸,執(zhí)行靜態(tài)初始化的所有動作强缘。因此,靜態(tài)初始化只在Class對象首次加載的時候進行一次 3不傅、用 new 類() 創(chuàng)建對象時旅掂,在堆(heap)內(nèi)存上為對象分配足夠的存儲空間 4、這塊存儲空間空間會被 自動初始化 访娶,即將基本類型數(shù)據(jù)設置成默認值商虐,引用類型數(shù)據(jù)設置成 null 5、執(zhí)行所有定義的初始化動作 6崖疤、執(zhí)行構(gòu)造器
八秘车、數(shù)組的初始化
- 定義一個數(shù)組
int[] a1;
編譯器不允許指定數(shù)組的大小,為了給數(shù)組創(chuàng)建相應的存儲空間劫哼,必須寫初始化表達式
將一個數(shù)組賦值給另一個數(shù)組叮趴,其實只是復制一個引用
數(shù)組元素中的基本數(shù)據(jù)類型值會自動化成空值