finalize()方法的作用及用法,小案例解释
我是一个从汽车行业转行IT的项目经理,我是Edward,如想了解更多,请关注我的公众号【转行项目经理的逆袭之路】。
finalize:Java中的一个方法名
Java使用finalize()方法在垃圾收集器将对象从内存中清除出去前,做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在Object类中定义的,因此所有的类都继承了它。子类可以重写finalize()方法以整理系统资源或者执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。
小案例如下:
/*** finalize()* @Title: FinalizeDemo.java* @author: EP* @date: 2020年5月15日上午9:34:52*/public class FinalizeDemo {public static void main(String[] args) {//创建两个Cake对象Cake c1 = new Cake(1);Cake c2 = new Cake(2);//将c2标记为null,并调用gc()来清理c2 = null;System.gc();}}class Cake extends Object{private int id;public Cake(int id) {// TODO Auto-generated constructor stubthis.id=id;System.out.println("cake: "+id+"is created");}//重写finalize方法protected void finalize() {System.out.println("cake:"+id+"is disposed");}}
总结:
finalize方法有如下四个特点:
1、永远不要主动调用某个对象的finalize方法,该方法应交给垃圾回收机制调用。
2、finalize方法的何时被调用,是否被调用具有不确定性。不要把finalize方法当成一定会被执行的方法。
3、当JVM执行可恢复对象的finalize方法(可恢复即没有final修饰的null)时,可能使该对象或系统中其他对象重新变成可达状态。
4、当JVM执行finalize方法时出现了异常,垃圾回收机制不会报告异常,程序继续执行。
由于finalize()方法并不一定会被执行,因此如果想清理某个类里打开的资源,则不要放在finali()方法中进行清理。
下面再补充一个finalize()复活对象的实例:
/*** finalize()复活对象* @Title: FinalizeTest.java* @author: EP* @date: 2020年5月15日上午10:05:05*/public class FinalizeTest {private static FinalizeTest ft = null;public void info() {System.out.println("测试资源清理的finalize方法");}public static void main(String[] args) throws Exception {// 创建FinalizeTest对象立即进入可恢复状态new FinalizeTest();// 通知系统进行资源回收System.gc(); // A 处// 强制垃圾回收机制调用可恢复对象的finalize()方法// Runtime.getRuntime().runFinalization(); //B处System.runFinalization(); // C处ft.info();}public void finalize() {// 让ft引用到试图回收的可恢复对象,即可恢复对象重新变成可达ft = this;}
}
A处和C处的代码必须都执行,否则因为垃圾回收的不确定性,finalize不会被执行,导致程序最终异常执行。
控制台输出成功,证明该静态对象被复活了。
finalize()方法的作用及用法,小案例解释相关推荐
- Object的finalize()方法的作用是否与C++的析构函数作用相同
Object的finalize()方法的作用是否与C++的析构函数作用相同 public class Finalization {private static Finalization finaliz ...
- PHP中的常见魔术方法功能作用及用法实例
这篇文章主要介绍了PHP中的常见魔术方法功能作用及用法实例,本文讲解了构造函数和析构函数__construct()和__desctruct()以及属性重载(Property Overloading)_ ...
- python电视剧口碑分析_小案例(七):口碑分析(python)
微信公众号:机器学习养成记 搜索添加微信公众号:chenchenwings <菜鸟侦探挑战数学分析>小案例,python实现第七弹 案件回顾 商业街口碑分析 1,顾客在网络上会发表对商品或 ...
- java基础语法入门到类型转换问题,运算符,数据输入,数组,方法概述,Debug模式,以及10个小案例的详细介绍。
java基础语法 目录 java基础语法 1. Java概述 1.1 Java语言发展史(了解) 1.2 Java语言跨平台原理(理解) 1.3 JRE和JDK(记忆) 1.4 JDK的下载和安装(应 ...
- click 点击图片不起作用_JavaScript 练手小案例:基于SVG的图片切换效果
最近太忙了,自动来到rjxy后,不晓得怎么回事,忙的都没时间更博了. 昨天还有个同学跟我说,你好久没更新博客了.. 甚为惭愧~~ 正好12月来了,今天开一篇. 最近上课讲到了 SVG,不晓得同学们理解 ...
- uni-app watch computed API作用语法用法 +案例
一.computedAPI 1.1前言:在模板中,可以通过插值语法显示一些data中的数据,但是在某些情况下,一些数据可能需要进行转换后再显示eg:需要对多个data数据进行进行运算.三元运算符来决定 ...
- Java 中finalize()方法起什么作用呢?
转自: Java 中finalize()方法起什么作用呢? Java之finalize()方法功能说明 当我们在一个类中定义了finalize()方法时, 如果一个对象被垃圾收集器析构(回收)之前,则 ...
- finalize方法作用
垃圾回收机制的一个算法,算法分析理解起来比较抽象,再讲一下新生代和老年代,垃圾回收机制的一个策略,垃圾回收机制是干嘛用的,1. 什么是垃圾回收机制?相当于JVM不定时的去回收不可达的对象,他这个完全是 ...
- java finalize 作用_java中的finalize方法有什么作用
java中的finalize方法是Object类中提供的一个方法,在GC准备释放对象所占用的内存空间之前,它将首先调用finalize()方法. finalize()方法是Object类中提供的一个方 ...
最新文章
- 计算机及网络应用基础思维导图_思维导图在生物教学中的应用
- R语言e1071包中的支持向量机:仿真数据(螺旋线性不可分数据集)、简单线性核的支持向量机SVM(模型在测试集上的表现、可视化模型预测的结果、添加超平面区域与原始数据标签进行对比分析)、如何改进核函数
- javaScript实现字符串首字母大写
- 《大数据系统构建:可扩展实时数据系统构建原理与最佳实践》一1.5 大数据系统应有的属性...
- vue项目实现登录(sessionStorage 存储 token)
- EF Code First 简单的示例
- puppet 横向扩展(三)
- 标准模板库(STL)之 map 列传
- SylixOS的I/O系统结构类型(ORIG型和NEW_1型)
- 伪静态与重定向--RewriteBase
- 您用c语言程序画过画?用c语言程序画个爱“心”,祝大家春节愉快,身体健康,平安吉祥,牛气冲天!顺便温习一下c语言编写,及运行正确姿势
- 马斯洛需求层次理论与消费者需求
- 比尔·盖茨的另一扇视窗
- Java中的switch
- 乳腺结节属于癌前病变吗?
- MacBook装低版本系统需要的系统包
- 自己手写一个RPC,实现远程调用功能(基于netty、反射和代理)
- canon老的一体机在win10上无法直接安装成功
- 智慧医院(iHospital)_乳腺健康专栏
- phpcms上传php,phpcms怎么上传歌曲文件
热门文章
- 淘宝/天猫同款商品搜索API接口详细演示
- 用VUE制作一个表格
- I want to put ding in the universe.
- 万豪国际大中华区第500家酒店开业
- Ljava/lang/String;错误
- 降维分析PCA和FCA
- [VS] 线程解冻和冻结
- 新安装的mysql登陆时出现Access denied for user ‘root‘@‘localhost‘ (using password: NO)
- 指派问题与匈牙利法讲解
- 坚持不懈的学习吧,少年