当前位置: 首页 > 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.dtcms.com/a/323736.html

相关文章:

  • Level-MC 11“天空”
  • SpringBoot配置生效优先级
  • 实战:MyBatis 中 db.properties 的正确配置与最佳实践
  • 通过 SCP 和 LXD 配置迁移 CUDA 环境至共享(笔记)
  • HTML全景效果实现
  • C语言(长期更新)第9讲:操作符详解(一)
  • 《励曼旋耕》Liman Rotary Tillage
  • AI大模型模态特征详解
  • 功能测试中常见的面试题-一
  • 第4章 程序段的反复执行for语句P115练习题(题及答案)
  • C++面向对象及其特性
  • 大语言模型提示工程与应用:大语言模型进阶提示工程技术
  • 【LLM实战|langchain】langchain基础
  • 百度网盘自动启动如何关闭,关闭智能看图
  • Windows系统NUL文件删除问题解决
  • 【ref、toRef、toRefs、reactive】
  • C++学习之STL学习:map/set
  • openvela之ADB
  • Java Stream 使用 Fork/Join框架的分治任务模型
  • 详解Windows(十四)——PowerShell与命令提示符
  • 如何检查减速机的密封件是否老化?
  • 06-docker容器常用命令
  • Docker镜像地址
  • 安装NodeJS和TypeScript简要指南
  • MySQL数据库详细笔记
  • 线上排查问题的一般流程是怎么样的?
  • Linux网络子系统架构分析
  • 检索增强生成:RAG(Retrieval Augmented Generation)
  • doubletrouble靶机通关练习笔记
  • 数学与应用数学:到底有啥区别?