当前位置: 首页 > news >正文

10.final, finally, finalize的区别

10.final, finally, finalize的区别

final:

final变量:被修饰的变量不可变,不可变分为 引用不可变对象不可变 ,final 指的是引用不可变。

  • 可以修饰类,属性和方法。

  • 修饰类时,此类不能被继承。修饰属性时,该变量会变成常量而且必须要初始化,一般和static使用。修饰方法的时候,此方法不能被重写,子类可以用该方法不能重写。

    // final 类:不可继承
    final class CoreBusiness {// final 方法:不可重写final void strategy() {System.out.println("公司核心战略不可更改");}
    }// 尝试继承会报错
    // class SubBusiness extends CoreBusiness {} // 编译错误public class Main {public static void main(String[] args) {final int contractID = 20230414; // final 变量:不可修改// contractID = 20230415; // 编译错误System.out.println("合同编号: " + contractID);}
    }
    

finally:

finally 是作为异常处理的一部分,只能在try/catch语句中使用,并且带一个语句块表示这段语句最终一定被执行(无论是否抛出异常),经常用在需要释放资源的时候使用,System.exit(0) 可以阻断finally的执行。

public class ContractProcessing {public static void main(String[] args) {try {// 模拟合同审核int result = 10 / 0; // 假设审核失败(抛出异常)} catch (ArithmeticException e) {System.out.println("合同审核失败: " + e.getMessage());} finally {// 无论审核结果,都执行资源清理System.out.println("归档审核记录并关闭系统");}}
}

finalize:

  • 这个是在 java.lang.Object 里定义的方法,每一个对象都有这一个方法,在gc启动时候,此对象被回收的时候被调用。
  • finalize这个方法只会执行一次,finalize方法被调用不一定会立刻把该对象回收,所以有可能调用finalize后,该对象又要被使用,不回收了,当下次要真正回收的时候finalize就不会执行,产生了问题,不推荐使用finalize方法
class Business {@Overrideprotected void finalize() throws Throwable {try {System.out.println("公司资源正在清理(如关闭服务器)");} finally {super.finalize();}}
}public class Main {public static void main(String[] args) {Business company = new Business();company = null; // 对象变为可回收System.gc();    // 建议 JVM 执行垃圾回收}
}
http://www.xdnf.cn/news/1268011.html

相关文章:

  • 【自动化运维神器Ansible】playbook自动化部署Nginx案例解析:助力从零构建高效Web服务
  • 2025 大语言模型系统学习路线:从基础到部署与优化的全方位指南(含权威资源与项目实战)
  • 4深度学习Pytorch-神经网络--损失函数(sigmoid、Tanh、ReLU、LReLu、softmax)
  • IDEA快捷键壁纸分享
  • 光伏面板损伤检出率↑91%!陌讯多模态识别算法在无人机巡检的落地实践
  • AI 破解数据质量难题:从混乱到可信的智能进化之路
  • 计算机网络1-6:计算机网络体系结构
  • webwork的学习
  • 非常简单!从零学习如何免费制作一个lofi视频
  • 香橙派 RK3588 部署千问大模型 Qwen2-VL-2B 推理视频
  • 2025华数杯数学建模C题:可调控生物节律LED光源全解析
  • 2025华数杯B题一等奖方案:网络切片无线资源管理全解析(附Python/MATLAB代码)
  • 机器学习(西瓜书)学习——绪论
  • LeetCode 面试经典 150_数组/字符串_分发糖果(15_135_C++_困难)(贪心算法)
  • 【Redis7.x】docker配置主从+sentinel监控遇到的问题与解决
  • GPT-5:数字大脑的进化史
  • 1393. 与7无关的数?
  • 【Linux】Tomcat
  • 八、Linux Shell 脚本:变量与字符串
  • jupyter服务器创建账户加映射对外账户地址
  • 2025-08-09 李沐深度学习12——卷积神经网络基础
  • Zabbix自动注册:轻松实现大规模监控
  • Vue3环境搭建+Mybatis-plus的使用
  • 【ref、toRef、toRefs、reactive】ai
  • 具体数学:和式(四)求和的一般方法
  • 【linux基础】Linux目录和Windows目录的区别
  • Openlayers基础教程|从前端框架到GIS开发系列课程(19)地图控件和矢量图形绘制
  • SimBA算法实现过程
  • GitHub第三方登录全解析:OAuth 2.0流程详解(适合初学者)
  • 华为实验: 单区域/多区域OSPF