返回
分清 final、finally、finalize:一个字节也不许差!
后端
2023-11-13 21:38:41
在 Java 语言中,有很多看起来很相似,但是用途却完全不同的语言要素。这其中,final、finally 和 finalize 就是比较容易混淆的三个概念。在本文中,博主将用实例剖析这些概念,帮助你分毫不差地搞明白它们之间的区别。
final
final 是 Java 中的一个,用于修饰变量、方法和类。
- 修饰变量时,表示该变量的值在编译后就不能再被修改。
- 修饰方法时,表示该方法不能被子类重写。
- 修饰类时,表示该类不能被继承。
finally
finally 是 Java 中的一个关键字,用于修饰 try/catch 语句块。无论 try/catch 语句块是否发生异常,finally 语句块中的代码都会被执行。
finalize
finalize 是 Java 中的一个方法,用于在对象被回收之前做一些清理工作。finalize 方法由垃圾回收器自动调用。
区别
- final 是一个关键字,而 finally 和 finalize 是方法。
- final 可以修饰变量、方法和类,而 finally 只可以修饰 try/catch 语句块,finalize 只可以修饰对象。
- final 修饰的变量的值在编译后就不能再被修改,finally 语句块中的代码无论是否发生异常都会被执行,finalize 方法在对象被回收之前被自动调用。
举个栗子
// 定义一个 final 变量
final int age = 18;
// 定义一个 final 方法
final void printAge() {
System.out.println("Age: " + age);
}
// 定义一个 finalize 方法
@Override
protected void finalize() {
System.out.println("Object is being finalized");
}
public class Person {
public static void main(String[] args) {
// 创建一个 Person 对象
Person person = new Person();
// 调用 printAge 方法
person.printAge();
// 将 person 对象置为 null,以便垃圾回收器回收它
person = null;
// 调用 System.gc() 方法,强制垃圾回收器运行
System.gc();
}
}
运行上面的代码,输出如下:
Age: 18
Object is being finalized
从输出中可以看出,final 修饰的变量的值在编译后就不能再被修改,finally 语句块中的代码无论是否发生异常都会被执行,finalize 方法在对象被回收之前被自动调用。