final
- 用来修饰数据,包括成员变量和局部变量,该变量只能被赋值一次且它的值无法被改变。对于成员变量来讲,我们必须在声明时或者构造方法中对它赋值;
- 用来修饰方法参数,表示在变量的生存期中它的值不能被改变;
- 修饰方法,表示该方法无法被重写;
- 修饰类,表示该类无法被继承。
finally
-
finally只能用在try/catch语句中并且附带着一个语句块,表示这段语句最终总是被执行。
-
执行了finally语句块请大家注意,捕获程序抛出的异常之后,既不加处理,也不继续向上抛出异常,并不是良好的编程习惯,它掩盖了程序执行中发生的错误.
-
return、continue和break都没能阻止finally语句块的执行;
finalize
- finalize() 是object的protected方法,子类可以覆盖该方法实现资源清理工作,在GC回收对象之前调用该方法.
- 不建议用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