effective java —— 終結方法守衛者

目錄:html

effective java —— 終結方法守衛者java

 

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

相關文章
相關標籤/搜索