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

相关文章
相关标签/搜索