首页 > 其他 > 详细

finalize方法注意事项(防止子类没有显示调用super.finalize())

时间:2019-08-13 13:25:35      阅读:143      评论:0      收藏:0      [点我收藏+]

父类中finalize如果有关闭资源的逻辑,当子类中finalize没有显示调用super.finalize()时父类的finalize不会被执行,所以父类的资源无法关闭。解决办法是让父类关闭资源的逻辑不依赖子类的finalize,脱离子类。所以可以父类中定义一个对象,在此对像的finalize中关闭父类中的资源。代码示例如下:

 1 /**
 2  * T1为子类
 3  **/
 4 public class T1 extends T2 {
 5     @Override
 6     protected void finalize() throws Throwable {
 7         // 当子类忘记显示调用父类finalize
 8 //                super.finalize();
 9 
10         System.out.println("T1资源被清理");
11 
12     }
13 
14 }
 1 /**
 2  * T2为父类
 3  **/
 4 public class T2 {
 5 
 6     // 假设是需要清理的资源
 7     private Integer i = new Integer(0);
 8 
 9     // 在T2中定义一个对象,仅仅用来除法T2中的finalize
10     private final Object finalizer = new Object() {
11         @Override
12         protected void finalize() throws Throwable {
13             // 在此处清理外层类的资源
14             i = null;
15             System.out.println("T2资源被清理");
16         }
17     };
18 }
 1 public class TEST {
 2 
 3     public static void main(String[] args) throws InterruptedException {
 4 
 5         T1 t1 = new T1();
 6 
 7         t1 = null;
 8 
 9         System.gc();
10 
11         Thread.sleep(30000);
12 
13     }
14 
15 }

程序执行结果如下:

技术分享图片

 

finalize方法注意事项(防止子类没有显示调用super.finalize())

原文:https://www.cnblogs.com/yhcjhun/p/11344991.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!