目錄:html
effective java 第2章:建立和銷燬對象。第7條 : 避免使用終結方法。最後的「終結方法守衛者 (finalizer guardian)」的例子,以加深理解。ide
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 * TODO 22 * @author xingle 23 * @data 2015-3-11 下午3:51:02 24 */ 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 @Override 33 protected void finalize(){ 34 System.out.println("執行父類中匿名內部類--終結方法守衛者,重寫的finalize()"); 35 // 在這裏調用Parent重寫的finalize便可在清理子類時調用父類本身的清理方法 36 parentlFinalize(); 37 } 38 }; 39 40 /** 41 * TODO 42 * @author xingle 43 * @data 2015-3-11 下午3:55:10 44 */ 45 protected void parentlFinalize() { 46 System.out.println("執行父類自身的終結方法"); 47 } 48 } 49 50 class Child extends Parent { 51 52 @Override 53 protected void finalize() { 54 System.out.println("執行子類finalize方法,注意,這裏子類並無調用super.finalize()"); 55 // 因爲子類(忘記或者其餘緣由)沒有調用super.finalize() 56 // 使用終結方法守衛者能夠保證子類執行finalize()時(沒有調用super.finalize()),父類的清理方法仍舊調用 57 } 58 }
執行結果:spa