父类中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 }

程序执行结果如下:

转载于:https://www.cnblogs.com/yhcjhun/p/11344991.html

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

  1. Java中为什么在重写finalize()方法时首选调用super.finalize()?

    我收到SonarQube错误:" 强制建议在此方法实现结束时调用super.finalize(),以防父实现必须也处置一些系统资源." 但我发现Object类没有finalize方 ...

  2. java finalize方法的使用

    <JAVA编程思想>: Java提供finalize()方法,垃圾回收器准备释放内存的时候,会先调用finalize(). (1).对象不一定会被回收. (2).垃圾回收不是析构函数. ( ...

  3. C#中Finalize方法的问题

    C#中Finalize方法的问题 ninputer在关于"值类型的Finalize不会被调用"中(http://blog.joycode.com/lijianzhong/archi ...

  4. Java中finalize方法

    前沿:在面试过程中我们可能会被问到final.finally.finalize的区别?本篇文章将介绍finalize的简单用法. Finalize()是Object类的方法. 在GC准备释放对象所占用 ...

  5. java中finalize()方法

    finalize 垃圾回收机器(Garbage Collection),也叫GC,垃圾回收器主要有一下特点: 当对象不再被程序所使用的时候,垃圾回收器将会将其回收 垃圾回收是在后台运行的,我们无法命令 ...

  6. java手动调用finalize,Java中的垃圾收集与finalize方法

    大家都知道使用new运算符在内存中创建了一个对象.构造函数用于初始化该对象的属性.当不再需要某个对象时,必须将其从内存中删除,以便该内存可以重用于其他对象.从内存中删除不需要的对象或放弃的对象称为垃圾 ...

  7. .net内存回收与Dispose﹐Close﹐Finalize方法

    .net内存回收与Dispose﹐Close﹐Finalize方法 一. net的对象使用一般分为三种情况﹕ 1.创建对象 2.使用对象 3.释放对象 二.创建对象 1.创建对象实际分为两个步骤﹕变量 ...

  8. 转.net内存回收与Dispose﹐Close﹐Finalize方法

    一. net的对象使用一般分为三种情况﹕ 1.创建对象 2.使用对象 3.释放对象 二.创建对象 1.创建对象实际分为两个步骤﹕变量类型宣告和初始化对象 2.变量类型宣告(declare),如﹕ Fi ...

  9. 【深入Java虚拟机JVM 09】JVM垃圾回收finalize方法--对象最有一次自我拯救

    说明:文章所有内容均摘自<深入理解Java虚拟机:JVM高级特性与最佳实践(第二版)> 即使在可达性分析算法中不可达的对象,也并非是"非死不可"的,这时候它们暂时处于& ...

最新文章

  1. 【数学专题】矩阵乘法
  2. 转:JAVA常见错误处理方法 和 JVM内存结构
  3. java 多条件比较_Java 多条件复杂排序小结
  4. Oracle 11g Win10卸载 ,亲测
  5. python怎么填充画布_如何在kivy中用图像填充画布?
  6. C++ primer 第13章 拷贝控制
  7. Backpack II 0-1背包
  8. 犀牛Rhinoceros 7 for Mac(三维建模软件)
  9. ipmitool介绍_ipmitool管理工具
  10. Atitit. 图像处理jpg图片的压缩 清理垃圾图片 java版本
  11. 深入了解创宇网络安全硬件产品--零信任(ZTSA)
  12. 99 Bottles Of Beer
  13. 洛谷 P1564 膜拜 题解
  14. 基于嵌入式设备的 单目标跟踪算法
  15. PE制作-001.UEFI和Legacy双启动U盘文件结构
  16. Tesseract+OpenCV实现中英文字识别
  17. 谷歌、亚马逊全面开火,一场前所未有的AI芯片大战
  18. MySql数据查重、去重的实现
  19. debian linux 修改时区
  20. 狂神聊 ElasticSearch(IK分词器+Rest+集成SpringBoot+实战爬虫项目+完整代码及资料)

热门文章

  1. Android 关于解决MediaButton学习到的media控制流程
  2. java 中JFinal getModel方法和数据库使用出现问题解决办法
  3. ueditor chrome bug
  4. 分块-洛谷P3203 [HNOI2010]BOUNCE 弹飞绵羊
  5. P NP NPC(1)(转载)
  6. Day6-------BOM
  7. Conditional
  8. MapReduce之OutputFormat理解
  9. Spark SQL运行原理和架构
  10. (10)FPGA顶层通用模块(学无止境)