final、finally、finalize有什么不同

谈谈final、finally、finalize有什么不同?

final可以用来修饰类、方法、变量,分别有不同的意义

final修饰的class不可以继承扩展,final的变量是不可修改的,final的方法是不可重写的override。final 不是 immutable,final 只能约束list对象这个引用不可以被赋值,但是元素的操作不会受影响。List.of 方法创建的本身就是不可变的List,再进行add添加会在运行时抛出异常。

fianlly则是Java保证重点代码一定要被执行的一种机制

我们可以使用try-catch-finally来捕获异常,并进行类似关闭JDBC连接、保证unlock锁等动作。

finalize是基础类Object类的一个方法

它的设计目的是保证对象在被垃圾收集前完成特定资源的回收。fianlize机制现在已经不推荐使用,并且在JDK 9 开始被标记为deprecated。finalize是一种已经被业界证明了的非常不好的实践。因为finalize被设计成在对象被垃圾收集前调用,这就意味着非空的finalize方法是个特殊的公民,JVM要对其进行额外的处理,导致回收变慢。Java平台目前正在逐步使用java.lang.ref.Cleaner来替换掉原有的finalize实现,Cleaner的实现是利用幻象引用和引用队列,它比finalize更加轻量级,更可靠。

你可能感兴趣的:(final、finally、finalize有什么不同)