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      * 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 }

 

执行结果:

技术分享

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。