Java面试2:final、finally、finalize 的区别?

final、finally、finalize 的区别

final 是 Java 中的一个关键字,用于修饰类、方法和变量。

  • 修饰类时,表示该类不能被继承。
  • 修饰方法时,表示该方法不能被子类重写。
  • 修饰变量时,表示该变量为常量,一旦赋值后不可更改。

finally 是 Java 中异常处理的一部分,用于定义在 try-catch 块后必须执行的代码块。

  • 无论是否发生异常,finally 块中的代码都会执行。
  • 常用于资源释放,如关闭文件或数据库连接。

finalize 是 Object 类中的一个方法,用于垃圾回收前的清理工作。

  • 当对象被垃圾回收器回收时,finalize() 方法会被调用。
  • 不推荐依赖 finalize() 进行资源释放,因为其执行时间不确定。

示例代码

复制代码
// final 示例
final class FinalClass {} // 不能被继承
final int CONSTANT = 100; // 常量

// finally 示例
try {
    // 可能抛出异常的代码
} catch (Exception e) {
    // 异常处理
} finally {
    // 必须执行的代码
}

// finalize 示例
@Override
protected void finalize() throws Throwable {
    // 对象回收前的清理
    super.finalize();
}

关键区别总结

  • final 是修饰符,用于类、方法或变量的不可变性。
  • finally 是异常处理机制的一部分,确保代码块一定执行。
  • finalize 是垃圾回收前的钩子方法,不保证及时执行。
相关推荐
wear工程师3 分钟前
线程池里的异常去哪了?execute 和 submit 不是一回事
java
孔明click3310 分钟前
别人绕过我的网关直接调用资源服务怎么办?使用 Sa-Token 解决:网关转发鉴权、RPC调用鉴权
java·sa-token·springboot·权限·权限认证
吴声子夜歌13 分钟前
Java面试——设计模式(一)
java·设计模式·面试
半亩码田23 分钟前
C#转Python第3.6篇:Python 的 @property 比 C# 的 get/set 更灵活
java·python·c#
老郑聊AI业财智造36 分钟前
Spring AI 技术架构与源码分析
java·人工智能·后端·spring·架构·软件工程
程序员与背包客_CoderZ37 分钟前
高性能分布式KV存储引擎RocksDB入门与C/C++编码实战
c语言·开发语言·数据库·c++·分布式·分布式数据库·rocksdb
省长42 分钟前
别人绕过我的网关直接调用资源服务怎么办?使用 Sa-Token 解决:网关转发鉴权、RPC调用鉴权
java·后端·开源
MetaLite43 分钟前
SpringBoot异常处理-到底该转换还是继续抛-入口层与调用层不能一刀切
java·spring boot·后端
钱栈up1 小时前
Mac 开发机一键发版不用切环境:我这样改造了团队的后端部署脚本Maven编译卡住20分钟?我靠两步定位到2处隐蔽编译错误
开发语言·python·macos
william_yangshun1 小时前
【大模型部署实战】kimi-k3-in-c 中文版:用 176KB 纯 C99 引擎在 CPU 上跑 Kimi K3 上手指南
c语言·开发语言