Java中finalize()的用法2008-05-22 02:53垃圾回收器要回收对象的时候,首先要调用这个类的finalize方法(你可以写程序验证这个结论),一般的纯Java编写的Class不需要重新覆盖这个方法,因为Object已经实现了一个默认的,除非我们要实现特殊的功能(这里面涉及到很多东西,比如对象空间树等内容)。
不过用Java以外的代码编写的Class(比如JNI,C++的new方法分配的内存),垃圾回收器并不能对这些部分进行正确的回收,这时就需要我们覆盖默认的方法来实现对这部分内存的正确释放和回收(比如C++需要delete)。
总之,finalize相当于析构函数,他是垃圾回收器回收一个对象的时候第一个要调用的方法。不过由于Java的垃圾回收机制能自动为我们做这些事情,所以我们在一般情况下是不需要自己来手工释放的。

有时当撤消一个对象时,需要完成一些操作。例如,如果一个对象正在处理的是非Java 资源,如文件句柄或window 字符字体,这时你要确认在一个对象被撤消以前要保证这些资源被释放。为处理这样的状况,Java 提供了被称为收尾(finalization )的机制。使用该机制你可以定义一些特殊的操作,这些操作在一个对象将要被垃圾回收程序释放时执行。
  要给一个类增加收尾(finalizer ),你只要定义finalize ( ) 方法即可。Java 回收该类的一个对象时,就会调用这个方法。在finalize ( )方法中,你要指定在一个对象被撤消前必须执行的操作。垃圾回收周期性地运行,检查对象不再被运行状态引用或间接地通过其他对象引用。就在对象被释放之前,Java 运行系统调用该对象的finalize( ) 方法。

  finalize()方法的通用格式如下:

  protected void finalize( )
  {
  // finalization code here
  }

  其中,关键字protected是防止在该类之外定义的代码访问finalize()标识符。该标识符和其他标识符将在第7章中解释。

  理解finalize( ) 正好在垃圾回收以前被调用非常重要。例如当一个对象超出了它的作用域时,finalize( ) 并不被调用。这意味着你不可能知道何时——甚至是否——finalize( ) 被调用。因此,你的程序应该提供其他的方法来释放由对象使用的系统资源,而不能依靠finalize( ) 来完成程序的正常操作。

  注意:如果你熟悉C++,那你知道C++允许你为一个类定义一个撤消函数(destructor ),它在对象正好出作用域之前被调用。Java不支持这个想法也不提供撤消函数。finalize() 方法只和撤消函数的功能接近。当你对Java 有丰富经验时,你将看到因为Java使用垃圾回收子系统,几乎没有必要使用撤消函数。

finalize()用法相关推荐

  1. Java中finalize()用法

    Java中finalize() 垃圾回收器要回收对象的时候,首先要调用这个类的finalize方法(你可以 写程序验证这个结论),一般的纯Java编写的Class不需要重新覆盖这个方法,因为Objec ...

  2. java finalize 作用_Java中finalize()用法

    垃圾回收器要回收对象的时候,首先要调用这个类的finalize方法(你可以 写程序验证这个结论),一般的纯Java编写的Class不需要重新覆盖这个方法,因为Object已经实现了一个默认的,除非我们 ...

  3. 转 Java中final、finally、finalize的区别与用法

    Java中final.finally.finalize的区别与用法 1.简单区别: final用于声明属性,方法和类,分别表示属性不可交变,方法不可覆盖,类不可继承. finally是异常处理语句结构 ...

  4. finalize()的真正用法及作用

    Java面试中经常会遇到一个问题:final.finally.finalize的区别? 今天我只谈大家回答的最不准确也误解最深的一个 -- finalize.谈finalize() 方法之前需要先了解 ...

  5. Android源码中final关键字的用法及final,finally,finalize的区别

    Android开发的学习流程 final,finally,finalize的区别 Android的发展越来越快,Android开发人员越来越多,当两种情况碰撞,在诸多开发者中跟紧Android步伐脱颖 ...

  6. finalize()方法的作用及用法,小案例解释

    我是一个从汽车行业转行IT的项目经理,我是Edward,如想了解更多,请关注我的公众号[转行项目经理的逆袭之路]. finalize:Java中的一个方法名 Java使用finalize()方法在垃圾 ...

  7. Finalize的用法

    1.当对象被回收时,系统自动调用该对象的finalize方法,子类可以重写该方法,做一些释放资源的操作 2.什么时候被回收:当某个对象没有任何引用时,则jvm就认为这个对象是一个垃圾对象,就会用垃圾回 ...

  8. java学习笔记(三)----成员权限,构造函数,this用法

    成员权限                         本类    同包类    非同包子类    非同包非子类 public         y        y               y  ...

  9. 关键字回顾(final/finally/finalize()、Synchronized、volatile、static)

    1. final, finally, finalize的区别 final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承. finally是异常处理语句结构的一部分,表示总是执行 ...

最新文章

  1. 华为网赛云数据中心基础原理自测答案
  2. python中表示空类型的是_python中怎么表示空值
  3. 银行软件测试工作量分析和评估方法(转)
  4. 杭州趣链张帅:趣链拥有大厂都没有的优势
  5. 解决小程序背景图片在真机上不能查看的问题
  6. 加快网站速度的最佳做法_(4)避免使用css表达式
  7. 2019小程序没必要做了_2019年什么行业适合做小程序
  8. Go语言版实现QQ扫码登陆
  9. 计算机total函数,以一敌十的SUBTOTAL函数,你不会用就太可惜了!
  10. <PCI-E> PCI-E的 x1/x4/x8/x16 四种插槽区别
  11. Spotlight搜索技巧
  12. Pyspark官方文档
  13. 如何将一串数字用函数的方法倒过来(C语言)
  14. 漫反射辐照——并不是很完全的翻译
  15. 服务器硬盘整体ghost,GHOST备份操作系统与实现整块硬盘对拷数据还是很简单的...
  16. 各大IT公司的名字由来(r7笔记第89天)
  17. windows下使用GRUB2 制作支持BIOS和UEFI的WINPE、LINUX、MAXDOS多引导U盘
  18. excel批量提取超链接
  19. (c++)判断上三角矩阵
  20. 教你彻底学会动态规划——入门篇

热门文章

  1. php 监听redis,php监听redis key失效触发回调事件
  2. LAMP 技术简介(4)
  3. RDKit分子的3D结构
  4. 前端学习——CSS布局
  5. kubectl全部命令用法示例
  6. 如何在Mac上安装IntelliJ IDEA
  7. gRPC快速入门(三)——Protobuf应用示例
  8. 红旗Linux的特点和应用范围,以红旗Linux和Ubuntu为例评点Linux发行版的优点
  9. 收集大家的想法,谢谢参与。。
  10. Java实现购物车功能