本篇内容主要讲解“Java中final,finally,finalize有哪些区别”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中final,finally,finalize有哪些区别”吧!
1.final 介绍
final
是 Java
语言中的一个关键字,使用 final
修饰的对象不允许修改或替换其原始值或定义。
final 可以用来修饰:类、方法、变量和参数,其中可以用来修饰“参数”这一项,容易被人遗忘,这是 final 的 4 种用法。
1.1 final 用法说明
当 final
修饰类时,此类不允许被继承,表示此类设计的很完美,不需要被修改和扩展。
当 final
修饰方法时,此方法不允许任何从此类继承的类来重写此方法,表示此方法提供的功能已经满足当前要求,不需要进行扩展。
当 final
修饰变量时,表示该变量一旦被初始化便不可以被修改。
当 final
修饰参数时,表示此参数在整个方法内不允许被修改。
1.2 final 用法展示
final 修饰类:
final class Animal { }
final 修饰方法:
public class FinalExample { public final void sayHi() { System.out.println("Hi~"); } }
final 修饰变量:
public class FinalExample { private static final String MSG = "hello"; //...... }
final 修饰参数:
public class FinalExample { public void sayHi(final String name) { System.out.println("Hi," + name); } }
2.finally 介绍
finally
则是 Java
中保证重点代码一定要被执行的一种机制。
我们可以使用 try-finally
或者 try-catch-finally
来进行类似关闭 JDBC
连接、保证释放锁等动作。
2.1 finally 用法展示
try { // do something } finally { // 一定会执行的代码 }
2.2 finally 扩展
有时候面试也会问:finally
是否一定会被执行?这是一个有诱导嫌疑的问题,正常情况下 finally 一定是会执行的,但有一个特殊情况 finally
也是不会执行的,
特殊的实现代码和执行结果如下:
3.finalize 介绍
finalize
是 Object
类中的一个基础方法,它的设计目的是保证对象在被垃圾收集前完成特定资源的回收,但在 JDK 9
中已经被标记为弃用的方法(deprecated
)。
在实际开发中不推荐使用 finalize
方法,它虽然被创造出来,但无法保证 finalize
方法一定会被执行,所以不要依赖它释放任何资源,因为它的执行极不“稳定”。在 JDK 9
中将它废弃,也很好的证明了此观点。
3.1finalize 性能问题
finalize
除了执行“不稳定”之外,还有一定的性能问题。
因为 finalize
的执行是和垃圾收集关联在一起的,一旦实现了非空的 finalize
方法,就会导致相应对象回收呈现数量级上的变慢,有人专门做过 benchmark
,大概是 40~50
倍的下降。
因为 finalize
被设计成在对象被垃圾收集前调用,这就意味着实现了 finalize
方法的对象是个“特殊公民”,JVM 要对它进行额外处理。finalize
本质上成为了快速回收的阻碍者,可能导致你的对象经过多个垃圾收集周期才能被回收。
到此,相信大家对“Java中final,finally,finalize有哪些区别”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
原创文章,作者:bd101bd101,如若转载,请注明出处:https://blog.ytso.com/tech/dev/237692.html