【转载】终结方法使用及注意
时间:2019-10-24
本文章向大家介绍【转载】终结方法使用及注意,主要包括【转载】终结方法使用及注意使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
/** * 终结方法守卫者: 如果子类实现者覆盖了超类的终结方法,但是忘了调用超类的终结方法,那么超类的终结方法永远不会调用。 为了防止此种情况出现,可以使用终结方法守卫者。即为每个被终结的对象创建一个附加的对象,该附加对象为一个匿名类, 将外围类的终结操作如释放资源放入该匿名类的终结方法中。同时,外围类保存着对该匿名类的唯一引用,即复制给私有变量域。 注意: 终结方法finalize()通常是不可预测的,也是很危险的,一般情况下是不必要的。 Java语言规范并不保证finalize()会被及时执行,即不确定终结方法执行时间,只规定在对象被垃圾回收之前执行 不应该依赖终结方法来改变重要的持久状态 终结方法会造成严重的性能损耗 终结方法链不会自动执行,如果类有终结方法,并且子类覆盖了终结方法,则子类的终结方法必须手工调用超类的终结方法。 你应该在try块中终结子类,并在相应的finally块中调用超类的终结方法。 * @author camus * */ public class A { @SuppressWarnings("unused") // 终结守卫者 private final Object finalizerGuardian = new Object() { @Override // 终结守卫者的终结方法将被执行 protected void finalize() { System.out.println("A finalize by the finalizerGuardian"); } }; @Override // 由于终结方法被子类覆盖,该终结方法并不会被执行 protected void finalize() { System.out.println("A finalize by the finalize method"); } public static void main(String[] args) throws Exception { B b = new B(); b = null; System.gc(); Thread.sleep(500); } } class B extends A { @Override public void finalize() { System.out.println("B finalize by the finalize method"); } }
原文地址:https://www.cnblogs.com/nachdenken/p/11730959.html
- 利用Centos或RedHat的iso镜像搭建本地yum仓库
- QUIC协议初探-iOS实践
- Golang语言社区--【基础知识】常量
- 服务器日志备份超节省空间的思路
- 《企鹅电竞weex实践—— iOS SDK的小九九》
- Linux操作系统DNS解析(nameserver)监控脚本
- 不给“爸爸”添麻烦 - iTOP iOS 动态库改造
- 移动SEO分享:php自动提交复合型Sitemap到百度搜索
- 《Android外部存储》
- Android JNI出坑指南
- 《iPhone X ARKit Face Tracking》
- 结合标签广告,定制一个QQ邮箱订阅
- SecureCRT全局发送相同命令,快速抓取服务器信息的方法
- [不定期更新]简单的shell脚本练习实例
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 通过 generic-webhook-trigger 插件实时获取 Bitbucket Repository Events
- 初识TypeScript:查找指定路径下的文件按类型生成json
- Xamarin Forms WPF 干掉默认的窗口导航条
- WPF 从零手动创建承载 Xamarin Forms 项目
- 帝都房价回调?带你用Python了解北京二手房市场现状
- Zabbix 利用 ncat 监控远端端口状态
- MySQL“被动”性能优化汇总!
- H3C WA2610i-GN 无线AP FAT 配置案例
- java强引用、软引用、弱引用、虚引用以及FinalReference
- 读源码——JDK动态代理
- 图解红黑树
- 算法——递归
- LeetCode 94 | 基础题,如何不用递归中序遍历二叉树?
- 读源码——cglib动态代理
- 每日一题 | 字符串转换问题