【Java基础面试题:final,finally,finalize的区别?】

final, finally, finalize 的区别

  1. final
    1.1 修饰类
    \quad 表示类不可被继承
    \quad 示例:final class String

    1.2 修饰方法
    \quad 表示方法不可被子类重写
    \quad 示例:

    public final void show() { ... }
    

    1.3 修饰变量
    \quad 基本类型变量值不可变,引用类型变量地址不可变
    \quad 示例:

    final int MAX = 100;
    final List<String> list = new ArrayList<>(); // 可修改list内容,不可重新赋值
    
  2. finally
    与异常处理配合使用,保证代码必定执行:
    \quad • 无论是否发生异常
    \quad • 即使try/catch中有return语句
    \quad 典型应用:

    try {
        // 打开文件
    } catch (IOException e) {
        // 处理异常
    } finally {
        // 必定关闭文件
    }
    
  3. finalize
    Object类定义的方法,对象被回收前执行:
    \quad • 执行时机由JVM决定
    \quad • Java 9起被标记为过时方法
    \quad 替代方案:使用AutoCloseable接口
    \quad 示例:

    protected void finalize() throws Throwable {
        // 资源清理(不推荐)
    }
    

关键差异总结

特性 作用域 执行确定性 典型用途
final 编译时约束 绝对 定义不可变结构
finally 运行时保证 确定 资源清理
finalize 对象生命周期 不确定 遗留资源回收(已过时)

你可能感兴趣的:(Java基础,java,开发语言)