1. final
final
是 Java 中的一个关键字,用于修饰类、方法和变量,表示“不可改变”的含义。
用法:
- 修饰类:
- 表示该类不能被继承。
- 例如:
String
类就是final
类。
- 修饰方法:
- 表示该方法不能被重写(Override)。
- 例如:
Object
类中的getClass()
方法就是final
方法。
- 修饰变量:
- 表示该变量是一个常量,一旦赋值后不能修改。
- 如果是基本数据类型,值不能改变;如果是引用类型,引用不能改变(但对象内部的状态可以改变)。
2. finally
finally
是 Java 中用于异常处理的关键字,通常与 try-catch
块一起使用。
作用:
finally
块中的代码无论是否发生异常都会执行,通常用于释放资源(如关闭文件、数据库连接等)。- 即使
try
或catch
块中有return
语句,finally
块中的代码也会在方法返回之前执行。
示例:
try {
// 可能抛出异常的代码
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("捕获异常:" + e.getMessage());
} finally {
System.out.println("finally 块执行"); // 无论是否发生异常都会执行
}
3. finalize
finalize
是 Object
类中的一个方法,用于在对象被垃圾回收器回收之前执行一些清理操作。
作用:
- 当垃圾回收器确定某个对象不再被引用时,会调用该对象的
finalize
方法。 finalize
方法通常用于释放非 Java 资源(如文件句柄、网络连接等)。
注意:
finalize
方法的执行不保证及时性,甚至不保证一定会执行(如果程序提前退出,垃圾回收器可能不会运行)。- 从 Java 9 开始,
finalize
方法被标记为@Deprecated
,推荐使用Cleaner
或PhantomReference
等替代方案。
示例:
class MyObject {
@Override
protected void finalize() throws Throwable {
try {
System.out.println("finalize 方法执行");
} finally {
super.finalize();
}
}
}
public class Main {
public static void main(String[] args) {
MyObject obj = new MyObject();
obj = null; // 使对象成为垃圾
System.gc(); // 建议 JVM 执行垃圾回收
}
}
4. 三者的区别
特性 | final | finally | finalize |
---|---|---|---|
类型 | 关键字 | 关键字 | 方法 |
作用 | 修饰类、方法、变量,表示不可改变 | 用于异常处理,确保代码一定执行 | 对象被回收前的清理操作 |
使用场景 | 定义常量、防止继承或重写 | 释放资源、确保代码执行 | 释放非 Java 资源 |
执行时机 | 编译时或运行时 | 异常处理时 | 垃圾回收时 |
是否推荐 | 推荐使用 | 推荐使用 | 不推荐使用(Java 9 已弃用) |
总结
final
:用于修饰类、方法、变量,表示不可改变。finally
:用于异常处理,确保代码一定执行。finalize
:用于对象回收前的清理操作,但已不推荐使用。
THE END
暂无评论内容