finalize()
工作原理應(yīng)該是這樣的:一旦垃圾收集器準(zhǔn)備好釋放對象占用的存儲空間,它首先調(diào)用finalize(),而且只有在下一次垃圾收集過程中,才會真正回收對象的內(nèi)存。
為什么要使用finalize()方法
因?yàn)閖ava內(nèi)存回收之能回收自己java自己創(chuàng)建的對象,而對調(diào)用未java的對象,如C,C++創(chuàng)建的對象,不能自動(dòng)的清除,可以通過在finalize()方法,將這些對象顯示的清除。
finalize()最有用處的地方之一是觀察垃圾收集的過程。
輸入結(jié)果為:
Created 47 Beginning to finalize after 8694 Chairs have been created Finalizing Chair #47, Setting flag to stop Chair creation After all Chairs have been created: total created = 9834, total finalized = 108 bye!
成員初使化
可以方法賦值初使化成員
下面這樣做是合法的: class CInit { int i = f(); int j = g(i); //... } 但下面這樣做是非法的: class CInit { int j = g(i); int i = f(); //... }
構(gòu)造器初使化
class Counter { int i; Counter() { i = 7; }
i首先會初始化成零,然后變成7。
1.初使化順序
先初使化成員,然后執(zhí)行構(gòu)造器內(nèi)容
2.靜態(tài)數(shù)據(jù)初使化
public class Dog { public static Dog sDog=new Dog("static dog"); public Dog(String str){ System.out.println(str); } public static void main(String[] args){ Dog dog=new Dog("init"); } }
輸入出結(jié)果
static dog init
(1) 類型為Dog的一個(gè)對象首次創(chuàng)建時(shí),或者Dog類的static方法/static字段首次訪問時(shí),Java解釋器必須找到Dog.class(在事先設(shè)好的類路徑里搜索)。 (2) 找到Dog.class后(它會創(chuàng)建一個(gè)Class對象,這將在后面學(xué)到),它的所有static初始化模塊都會運(yùn)行。因此,static初始化僅發(fā)生一次——在Class對象首次載入的時(shí)候。 (3) 創(chuàng)建一個(gè)new Dog()時(shí),Dog對象的構(gòu)建進(jìn)程首先會在內(nèi)存堆(Heap)里為一個(gè)Dog對象分配足夠多的存儲空間。 (4) 這種存儲空間會清為零,將Dog中的所有基本類型設(shè)為它們的默認(rèn)值(零用于數(shù)字,以及boolean和char的等價(jià)設(shè)定)。 (5) 進(jìn)行字段定義時(shí)發(fā)生的所有初始化都會執(zhí)行。 (6) 執(zhí)行構(gòu)建器。
3.明確進(jìn)行的靜態(tài)初始化
class Spoon { static int i; static { i = 47; } }
這段代碼僅執(zhí)行一次——首次生成那個(gè)類的一個(gè)對象時(shí),或者首次訪問屬于那個(gè)類的一個(gè)static成員時(shí)
4.非靜態(tài)實(shí)例的初始化
class Mug { Mug(int marker) { System.out.println("Mug(" + marker + ")"); } } public class Mugs { Mug c1; { c1 = new Mug(1); System.out.println("c1 initialized"); } Mugs() { System.out.println("Mugs()"); } public static void main(String[] args) { System.out.println("Inside main()"); Mugs x = new Mugs(); } } 輸入出結(jié)果
Inside main() Mug(1) c1 initialized Mugs()
Powered by: BlogJava Copyright © 沙漠中的魚