final、finally、finalize 有什么区别?
final、finally、finalize 有什么区别?
final
-
含义:
- final是一个关键字,表示最终的、不可改变的。
-
作用:
- 修饰变量:变量一旦被初始化后其值不能被修改,成为常量。
- 修饰方法:方法不能被重写。
- 修饰类:类不能被继承。
final int CONSTANT = 10;
final class FinalClass {}
finally
-
含义:
- finally是用于异常处理的一个关键字,与
try-catch
语句块一起使用。
- finally是用于异常处理的一个关键字,与
-
作用:
- 无论是否发生异常,finally代码块中的代码一定会被执行。通常用于释放资源等操作,确保一些关键的操作不会因为异常而被忽略。
try {
// 可能抛出异常的代码
} catch (Exception e) {
// 处理异常
} finally {
// 无论是否发生异常都要执行的代码,如关闭文件、释放数据库连接等
}
finalize
-
含义:
- finalize是
Object
类中的一个方法。
- finalize是
-
作用:
- 在Java中,
finalize()
方法用于在垃圾回收器回收对象之前执行清理操作 - 这个方法已经不推荐使用,因为它的行为不可预测,且在Java 9中被标记为废弃。
- 但是,由于垃圾回收的不确定性,不能确切地知道finalize方法何时会被调用,甚至不能保证它一定会被调用。并且现代 Java 编程中不建议过度依赖这个方法来进行资源清理,而应该使用
try-with-resources
语句或在finally
块中进行资源清理以确保资源的正确释放。
- 在Java中,
class MyClass {
@Override
protected void finalize() throws Throwable {
try {
// 清理资源
} finally {
super.finalize(); // 调用父类的finalize方法
}
}
}
总结
final
是一个修饰符,用于声明不可变的变量、不可重写的方法和不可继承的类finally
是一个关键字,用于定义始终执行的代码块finalize
是一个方法,用于在对象被垃圾回收前执行清理操作,但已不推荐使用