final,finally,finalize详解

final

  1. 用来修饰数据,包括成员变量和局部变量,该变量只能被赋值一次且它的值无法被改变。对于成员变量来讲,我们必须在声明时或者构造方法中对它赋值;
  2. 用来修饰方法参数,表示在变量的生存期中它的值不能被改变;
  3. 修饰方法,表示该方法无法被重写;
  4. 修饰类,表示该类无法被继承。

finally

  1. finally只能用在try/catch语句中并且附带着一个语句块,表示这段语句最终总是被执行。

  2. 执行了finally语句块请大家注意,捕获程序抛出的异常之后,既不加处理,也不继续向上抛出异常,并不是良好的编程习惯,它掩盖了程序执行中发生的错误.

  3. return、continue和break都没能阻止finally语句块的执行;

finalize

  1. finalize() 是object的protected方法,子类可以覆盖该方法实现资源清理工作,在GC回收对象之前调用该方法.
  2. 不建议用finalize方法完成非内存资源的清理工作,但建议用于:清理本地对象② 作为确保某些非内存资源(如Socket、文件等)释放的一个补充:在finalize方法中显式调用其他资源释放方法.

** finalize()用途**

不论对象是如何创建的,垃圾回收期都会负责释放对象的所有内存.
finalize()需求限制到一种特殊的情况:通过某种创建对象方式以外的方式为对象分配了存储空间
需要使用 finalize()的原因,是由于分配空间是可能采用了c语言中的做法,而非java的通常做法,主要发生在使用的本地方法的情况下
在非java代码中,也许会调用c语言的malloc()函数系列来分配存储空间,而且除非用了free()函数,存储空间将不再释放,从而造成内存泄漏.这是需要finalize()中本地方法调用他.
不要过多使用finalize(),他不是普通进行清理工作的方法,避免使用finalize()函数,finalize()函数无法预料,常常是危险的,总之是多余的.

Java9中的垃圾回收机制

finalize机制本身就是存在问题的。
finalize机制可能会导致性能问题,死锁和线程挂起。
finalize中的错误可能导致内存泄漏;如果不在需要时,也没有办法取消垃圾回收;并且没有指定不同执行finalize对象的执行顺序。此外,没有办法保证finlize的执行时间。
遇到这些情况,对象调用finalize方法只有被无限期延后。

Java9中finalize方法已经被废弃。


原文:https://blog.csdn.net/u011695358/article/details/78860410

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值