標籤:
目錄:
effective java —— 終結方法守衛者
effective java 第2章:建立和銷毀對象。第7條 : 避免使用終結方法。最後的“終結方法守衛者 (finalizer guardian)”的例子,以加深理解。
1 /** 2 * chapter 2——終結守衛者 3 * @ClassName: Parent 4 * TODO 5 * @author xingle 6 * @date 2015-3-11 下午3:49:47 7 */ 8 public class Parent { 9 10 public static void main(String[] args){11 doSth();12 System.gc(); 13 try {14 Thread.sleep(2000);15 } catch (InterruptedException e) {16 e.printStackTrace();17 }18 }19 20 /**21 * TODO22 * @author xingle23 * @data 2015-3-11 下午3:51:0224 */25 private static void doSth() {26 Child c = new Child();27 System.out.println(c); 28 }29 30 private final Object guardian = new Object(){31 32 @Override33 protected void finalize(){34 System.out.println("執行父類中匿名內部類--終結方法守衛者,重寫的finalize()");35 // 在這裡調用Parent重寫的finalize即可在清理子類時調用父類自己的清理方法36 parentlFinalize();37 }38 };39 40 /**41 * TODO42 * @author xingle43 * @data 2015-3-11 下午3:55:1044 */45 protected void parentlFinalize() {46 System.out.println("執行父類自身的終結方法"); 47 }48 }49 50 class Child extends Parent {51 52 @Override53 protected void finalize() {54 System.out.println("執行子類finalize方法,注意,這裡子類並沒有調用super.finalize()");55 // 由於子類(忘記或者其他原因)沒有調用super.finalize()56 // 使用終結方法守衛者可以保證子類執行finalize()時(沒有調用super.finalize()),父類的清理方法仍舊調用57 }58 }
執行結果:
effective java —— 終結方法守衛者