码迷,mamicode.com
首页 > 编程语言 > 详细

effective java —— 终结方法守卫者

时间:2015-03-11 16:54:12      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:

目录:

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 }

 

执行结果:

技术分享

effective java —— 终结方法守卫者

标签:

原文地址:http://www.cnblogs.com/xingele0917/p/4330182.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!