Java -- 每日一问:谈谈 finalfinally finalize 有什么不同?

Posted Kevin-Dev

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java -- 每日一问:谈谈 finalfinally finalize 有什么不同?相关的知识,希望对你有一定的参考价值。

典型回答

final 可以用来修饰类、方法、变量,分别有不同的意义,final 修饰的 class 代表不可以继承扩展,final 的变量是不可以修改的,而 final 的方法也是不可以重写的(override)。

finally 则是 Java 保证重点代码一定要被执行的一种机制。我们可以使用 try-finally 或者 try-catch-finally 来进行类似关闭 JDBC 连接、保证 unlock 锁等动作。

finalize 是基础类 java.lang.Object 的一个方法,它的设计目的是保证对象在被垃圾收集前完成特定资源的回收。finalize 机制现在已经不推荐使用,并且在 JDK 9 开始被标记为 deprecated。

高手回答

  1. final
    修饰类:不可被继承
    修饰方法:不可重写
    修饰变量:不可修改,只能约束引用不可以被再次赋值。匿名内部类访问局部变量时需要使用 final,因为 Innerclass 实际会 copy 一份局部变量,final 可以防止出现数据一致性问题

  2. finally:Java 保证重点代码一定要被执行的机制,try - finally,除非在 finally 前执行了 System.exit(1)、try 中死循环、线程被杀死

  3. finalize:基础类 Object 的一个方法,保证对象在被垃圾收集前完成特定的资源回收。由于 finalize 执行时间不确定且可能造成程序死锁、拖慢垃圾收集等问题,Java 9 中将改方法废弃
    优化:使用 Cleaner 配合幻想引用。

你的朋友是不是也在准备面试呢?你可以把今天的题目分享给好友,或许你可以帮到他。

以上是关于Java -- 每日一问:谈谈 finalfinally finalize 有什么不同?的主要内容,如果未能解决你的问题,请参考以下文章

Java -- 每日一问:谈谈你知道的设计模式?

Java -- 每日一问:谈谈接口和抽象类有什么区别?

Java -- 每日一问:谈谈 finalfinally finalize 有什么不同?

Java -- 每日一问:谈谈你的GC调优思路?

Java -- 每日一问:谈谈接口和抽象类有什么区别?

Java -- 每日一问:谈谈 Spring Bean 的生命周期和作用域?