第5章 初始化與清理

1. 用例

本章討論初始化和清理的問題,java採用了構造器初始化,並提供了“垃圾回收器”對不再使用的內存資源進行釋放。

2. 靜態

2.1 用構造器確保初始化

構造器採用和類相同的名稱。
new 表達式返回對新建對象的引用,但構造器沒有任何返回值。
當創建對象時也就是該此對象分配一個存儲空間,並返回一個對象引用的名字。

2.2 方法重載

爲了讓方法名相同而形式參數不同,必須使用方法重載。
每個重載的方法都必須有一個獨一無二的參數類型列表。

2.3 默認構造器

如果類中沒有定義構造器方法,則編譯器會自動創建一個默認構造器方法。

2.4 this關鍵字

this關鍵字只能在方法內部使用,表示對“調用方法的那個對象”的引用。
在構造器中調用構造器,使用this(參數列表),將調用符合此參數列表的某個構造器。
在static方法的內部不能調用非靜態方法。

2.5 清理:終結處理和垃圾回收

垃圾回收器只能釋放經由new分配的內存。
對於非new分配的資源(如調用本地方法),可在類中定義finalize方法,當垃圾回收器準備釋放對象資源時,將首先調用finalize方法,並在下一次垃圾回收動作發生時,才真正回收對象佔用的內存。
垃圾回收只與內存有關。
System.gc()用於強制進行終結動作。
垃圾清理的思路是從堆棧和靜態存儲區出發,遍歷所有引用,找出存活的對象。
當程序需要裝載某個類時,編譯器先找到.class文件,然後將該類的字節碼裝入內存,最後有兩種方案選擇,一種是讓編譯器編譯所有代碼,另一種是惰性加載,只有在需要時才加載類字節碼。

2.6 成員初始化

類的每個成員都會有一個默認值,基本類型爲0或false,引用類型爲null.

2.7 構造器初始化

在內的內部變量定義的順序決定了初始化的順序。 
無論創建多少對象,靜態數據都佔用一份存儲空間。

2.8 數組初始化

數組只是相同類型的,用一個標識符名稱封裝起來的一個對象序列或基本數據類型。
數組是通過方括號操作符[] 來定義和使用的。
定義數組只需要在類型名後加上一對空方括號。如int[] name
可變參數列表:類型... 變量名 如(String... strs)

2.9 枚舉類型

用於我們在需要羣組並使用枚舉類型時。
enum可以在switch語句內使用。

3. 動態

3. 1 對象的創建過程

1. java解釋器查找類路徑,以定位class 文件。
2. 載入class文件,有關靜態初始化的動作都執行。
3. 在堆上爲對象分配足夠的空間。
4. 分配的存儲空間被清零。
5. 執行字段定義出的動作。
6. 執行構造器。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章