Java析构方法
在 Java 的 Object 类中还提供了一个 protected 类型的 finalize() 方法,因此任何 Java 类都可以覆盖这个方法,在这个方法中进行释放对象所占有的相关资源的操作。
对象的 finalize() 方法具有如下特点:
垃圾回收器是否会执行该方法以及何时执行该方法,都是不确定的。
finalize() 方法有可能使用对象复活,使对象恢复到可触及状态。
垃圾回收器在执行 finalize() 方法时,如果出现异常,垃圾回收器不会报告异常,程序继续正常运行。
例如:
protected void finalize() {
// 对象的清理工作
}
例 1
下面通过一个例子来讲解析构方法的使用。该例子计算从类中实例化对象的个数。1)Counter 类在构造方法中增值,在析构方法中减值。如下所示为计数器类 Counter 的代码:
public class Counter {
private static int count = 0; // 计数器变量
public Counter() {
// 构造方法
this.count++; // 创建实例时增加值
}
public int getCount() {
// 获取计数器的值
return this.count;
}
protected void finalize() {
// 析构方法
this.count--; // 实例销毁时减少值
System.out.println("对象销毁");
}
}
2)创建一个带 main() 的 TestCounter 类对计数器进行测试,示例代码如下:
public class TestCounter {
public static void main(String[] args) {
Counter cnt1 = new Counter(); // 建立个实例
System.out.println("数量:"+cnt1.getCount()); // 输出1
Counter cnt2 = new Counter(); // 建立第二个实例
System.out.println("数量:"+cnt2.getCount()); // 输出2
cnt2 = null; // 销毁实例2
try {
System.gc(); // 清理内存
Thread.currentThread().sleep(1000); // 延时1000毫秒
System.out.println("数量:"+cnt1.getCount()); // 输出1
} catch(InterruptedException e) {
e.printStackTrace();
}
}
}
执行后输出结果如下:
技巧:由于 finalize() 方法的不确定性,所以在程序中可以调用 System.gc() 或者 Runtime.gc() 方法提示垃圾回收器尽快执行垃圾回收操作。数量:1
数量:2
对象销毁
数量:1
- 随机文章
- 核心危机(核心危机魔石合成攻略)
- 风儿(风儿轻轻的吹)
- 饿了么红包怎么用(饿了么红包怎么用微信支付)
- 儿童教育文章(儿童教育)
- 光遇花手先祖位置(安卓光遇手花先祖)
- 广州4a广告公司(广州4a广告公司创意总监年薪)
- 抖音卡(抖音卡顿怎么解决)
- xboxones(xboxone手柄怎么配对主机)
- 兵马俑(兵马俑介绍和历史背景)
- 陈武简历
- 帆船比赛(帆船比赛视频)
- 海猫鸣泣之时游戏(海猫鸣泣之时游戏在哪玩)
- 韩国媳妇和小雪(韩国媳妇和小雪的父亲工资是多少)
- 儋州市第二中学(儋州市第二中学录取分数线)
- 鬼泣5攻略(鬼泣5攻略第三关怎么跳)
- 地球日主题(2020年世界地球日主题)
- 和柳亚子(和柳亚子先生于田)
- 冰客(冰客果汁)
- yy魔兽(yy魔兽世界)
- 国外成人游戏(国外成人游戏注册需要visa信用卡)
- 充值卡代理(充值卡代理加盟)
- 拆奶罩
- 郭妮小说(恶魔的法则郭妮小说)
- 杭同(杭同培训中心怎么样)
- 服饰加盟(服饰加盟店招商)
- 疯狂填字(疯狂填字5)
- 点对点短信息(点对点短信息费是什么意思)
- 观音普门品(观音普门品念诵全文)
- 河北省大运会(河北省大运会时间)
- 骇客神条(骇客神条怎么辨别真假)
