面试题:请简述 final、finalize、finally 的区别
⭐ Java 基础高频面试重点
1. final
final 是修饰符 ,可以用来修饰变量、方法、类
- 修饰变量:代表常量,仅允许赋值一次,赋值完成后不可修改。
- 修饰方法 :该方法可以被子类继承使用,但不允许子类重写 (覆盖)。
- 修饰类:该类不能被继承,没有子类。
代码示例
// final修饰类:不能被继承
final class Person{
// final修饰方法:不能被子类重写
public final void say(){
System.out.println("hello");
}
}
public class Test {
public static void main(String[] args) {
// final修饰局部变量,只能赋值一次
final int num = 10;
// num = 20; 编译报错,不能修改
}
}
2. finalize()
finalize() 是Object 类中的成员方法
- 当对象即将被垃圾回收器回收时,JVM 会自动调用该方法。
- 作用:对象被回收前,做资源清理操作。
⚠️注意:JDK9 之后该方法已经被标记废弃,不推荐开发使用,垃圾回收时机无法由程序员控制。
3. finally
finally 是异常处理的关键字
- 作用:
finally代码块内的代码一定会执行(除 JVM 直接退出场景)。 - 常用搭配结构:
try{}catch{}finally{}、try{}finally{} - 开发场景:资源关闭,例如 IO 流、数据库连接等释放操作。
代码示例
public class FinallyDemo {
public static void main(String[] args) {
try{
System.out.println("try代码块");
int a = 1 / 0;
}catch (Exception e){
System.out.println("捕获异常");
}finally {
System.out.println("finally代码块,用于关闭资源");
}
}
}
对比表格(面试背诵版)
表格
| 关键字 / 方法 | 类型 | 作用 |
|---|---|---|
| final | 修饰符 | 修饰变量 / 方法 / 类,表示不可变、不可重写、不可继承 |
| finalize() | Object 中的方法 | 对象垃圾回收前,JVM 自动调用,已废弃 |
| finally | 异常关键字 | 和 try-catch 搭配,存放必须执行的代码,常用于关闭资源 |