Java final、finally、finalize 有什么区别?
final
、finally
和 finalize
是 Java 中三个完全不同的概念:
-
final
:final
是一个关键字,用于修饰类、方法、变量。- 当用于修饰类时,表示该类不能被继承。
- 当用于修饰方法时,表示该方法不能被子类重写。
- 当用于修饰变量时,表示该变量是一个常量,只能被赋值一次。
javapublic final class ExampleClass { final int constantValue = 42; final void exampleMethod() { // 该方法不能被子类重写 } }
-
finally
:finally
是一个关键字,用于定义在异常处理结构中的代码块,无论是否发生异常都会被执行。- 通常与
try-catch
结构一起使用,用于确保资源得到释放或一些清理工作。
javatry { // 一些可能抛出异常的代码 } catch (Exception e) { // 异常处理代码 } finally { // 无论是否发生异常都会执行的代码 // 通常用于清理资源,例如关闭文件或网络连接 }
-
finalize
:finalize
是一个方法,属于Object
类,在 Java 中被用于垃圾回收(Garbage Collection)。- 在对象被垃圾收集器回收之前,
finalize
方法会被调用,可以在此方法中进行一些资源释放或清理工作。 - 注意,不建议过度依赖
finalize
,因为它的执行时机和是否执行并不是完全可控的。
javapublic class ExampleClass { // 重写 finalize 方法 @Override protected void finalize() throws Throwable { // 执行一些清理工作 System.out.println("Object is being garbage collected"); } }
请注意,finalize
方法在现代 Java 中不是首选的资源管理方式,而是使用 try-with-resources 或类似的机制来确保资源的正确释放。