面试题:Java 中 final、finally 和 finalize 各有什么区别?

在Java中,finalfinallyfinalize 是三个不同的概念,各自有不同的用途和意义。下面分别介绍它们的区别:

final

  • 用途final 是一个关键字,可以用来修饰类、方法或变量。
    • 当用于类时(如 final class MyClass),表示该类不能被继承。
    • 当用于方法时(如 public final void myMethod()),表示该方法不能在子类中被重写。
    • 当用于变量时(如 final int MY_NUMBER = 10;),表示该变量是一个常量,其值一旦被赋值后就不能再改变。
  • 目的:主要是为了确保某些重要的属性或行为不会被修改,增强程序的安全性和可维护性。

finally

  • 用途finally 是异常处理机制的一部分,通常与 trycatch 配合使用(try-catch-finally 结构)。无论是否发生异常,finally 块中的代码都会被执行。
  • 目的:提供了一个场所来执行清理工作,比如关闭文件流、数据库连接等资源释放操作,确保这些必要的清理代码总是被执行,即使在发生异常的情况下也是如此。

finalize

  • 用途finalize() 方法是在 Object 类中定义的一个方法。理论上,当垃圾回收器确定不存在对该对象的更多引用时,会自动调用此方法进行清理工作。然而,在实际应用中,依赖 finalize() 方法来进行资源管理是不推荐的,因为无法保证何时甚至是否会被调用。
  • 注意:由于性能问题以及不确定性,finalize() 方法自Java 9起已被标记为废弃(deprecated),并建议使用更明确的资源管理方式,例如通过实现 AutoCloseable 接口并在 try-with-resources 语句中使用,或者手动管理资源。

总结来说,final 关键字用于限制修改,finally 用于确保关键代码段在异常处理结构中的执行,而 finalize 则是为了在对象被垃圾回收前提供一次执行清理的机会,但在现代Java编程实践中应避免使用。

THE END
喜欢就支持一下吧
点赞10 分享