final finally 和 finalize的区别

news/2025/5/20 10:34:47

final、finally和finalize都是Java中的关键字,但它们的含义和用途却不同。

  • final 表示不可变,用于修饰类、方法和变量。

  • finally 表示无论如何都会执行的代码块,用于清理资源和恢复现场。

  • finalize 是Object类的一个方法,用于在对象被垃圾收集器回收之前释放资源和清理工作。

1.final

final是Java语言的关键字,可以用来修饰类、方法、变量等,表示这些元素是不可变的,一旦被赋值之后就不能再进行修改。final的作用如下:

  • 用于修饰类,表示该类不能被继承。
  • 用于修饰方法,表示该方法不能被子类重写。
  • 用于修饰变量,表示该变量只能被赋值一次,且不能被重新赋值。
  • 用于修饰方法参数和局部变量,表示它们只能被赋值一次,且不能被重新赋值。

代码示例:

public final class MyClass { // 该类不能被继承public final int num = 100; // 变量只能被赋值一次,且不能被重新赋值public final void myMethod(final int arg) { // 参数只能被赋值一次,且不能被重新赋值final int localVar = 200; // 局部变量只能被赋值一次,且不能被重新赋值System.out.println(num + arg + localVar);}
}

2.finally

finally是Java语言的关键字,用于定义在try-catch块中的一个代码块,在任何情况下,无论是否发生异常,该代码块都会被执行。finally块经常用于清理资源和恢复现场。

代码示例:

FileInputStream fis = null;
try {fis = new FileInputStream("test.txt");// 处理fis
} catch (FileNotFoundException e) {// 处理文件不存在异常
} finally {if (fis != null) {try {fis.close();} catch (IOException e) {// 处理关闭文件流异常}}
}

3.finalize

finalize是Java中一个Object类的protected方法,当一个对象即将被垃圾收集器回收时,会自动调用该对象的finalize()方法。子类可以重写该方法进行资源释放或类似的清理工作。但应该避免过度依赖该方法,因为不保证一定会执行,原因如下:

  • finalize()方法的执行时间不确定,它的调用是由JVM中某个优化算法所决定的,具体时间无法预测。

  • finalize()方法的调用依赖于垃圾回收器的工作机制,如果垃圾回收器没有运行或者没有回收相应的对象,那么finalize()方法也不会被调用。

  • finalize()方法的调用只有在对象被回收之前才会被执行,如果存在引用链或者存在其他原因导致对象没有被回收,那么finalize()方法就不会被调用。

  • 由于finalize()方法只会被执行一次,如果该方法由于某些原因抛出异常,那么这个对象的finalize()方法就不会再被调用,可能会造成资源泄漏等问题。

代码示例:

public class MyClass {@Overrideprotected void finalize() throws Throwable {// 资源释放或清理工作super.finalize();}
}

文章来源:https://blog.csdn.net/weixin_58724261/article/details/131074368
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:https://dhexx.cn/news/show-4643176.html

相关文章

从零手写操作系统之RVOS软件定时器实现-08

从零手写操作系统之RVOS软件定时器实现-08 定时器分类软件定时器的分类软件定时器设计与实现软件定时器调用流程增加对周期性定时任务支持测试优化点 本系列参考: 学习开发一个RISC-V上的操作系统 - 汪辰 - 2021春 整理而来,主要作为xv6操作系统学习的一个前置基础。…

多分类问题

目录 多分类问题介绍1 多分类1.1 数据集1.2 数据可视化1.3 逻辑回归的向量化1.3.1 代价函数的向量化1.3.2 梯度的向量化1.3.3 正则化逻辑回归的向量化 1.4 多分类-分类器 1.5 使用分类器进行预测 多分类问题 介绍 在本练习中,我们将使用逻辑回归来识别手写数字&…

技巧:win10的另一种美化字体的方式,使用noMeiryoUI

目录 1. 前提2. 字体选择3. 查看已经安装的字体并查看效果4. 安装软件修改系统字体5. 修改浏览器字体 1. 前提 21年的时候写了一篇文章,《Windows10下美化字体,达到类似mac的效果》,当时还很迷恋macType这个软件的使用,觉得好牛逼…

List、Set、Map区别和特点

Java中的List、Set、Map是Java集合框架中的三种常用数据结构,它们分别用于存储一组元素,并且具有不同的特点和用途。 List List 接口是一个有序的集合,它可以包含重复的元素。List 是一种序列容器,可以控制元素的插入和删除位置…

阅读ConcurrentHashMap源码,我学到了什么?

文章目录 ConcurrentHashMap怎样保证线程安全的put元素的流程具体对于红黑树是怎样保证线程安全的如何并发安全的初始化一个数组如何统计存储元素个数的怎样进行多线程扩容的 首先说明, 本篇分析基于jdk1.8. ConcurrentHashMap怎样保证线程安全的 ConcurrentHashMap主要是通过…

配置MQTT

MQTT 文章目录 MQTT快速上手源码安装mosquitto配置BrokerSDK调用接口PythonNodeJs/WebJsJavaC 快速上手 # 安装Broker服务 apt install mosquitto mosquitto-clients# 启动服务 mosquitto# (tty1)阻塞订阅一个主题 mosquitto_sub -t "test/topic&q…

微服务治理之Spring Cloud Consul

微服务治理之Spring Cloud Consul 一、简介1. 定义2. 目的3. 常用的微服务治理工具 二、Spring Cloud Consul1. 概述2. 功能3. 工作原理 三、Consul的优势1. 服务发现2. 健康检查3. 动态配置管理4. 多数据中心支持5. 分布式锁 四、Consul在微服务治理中的应用1. 服务注册2. 服务…

软考A计划-系统架构师-官方考试指定教程-(3/15)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

测试用例文档模板

1. 引言 1.1 目的 1.2 范围 1.3 定义、缩略语和缩写 1.4 参考文献 1.5 概述 2. 测试策略 2.1 测试目标 2.2 测试方法 2.3 测试环境 2.4 测试资源 2.5 测试计划 3. 测试执行 3.1 登录模块测试 3.1.1 用例编号:TC-001 3.1.2 用例名称:登录成功验证 3.1.3 前…

Python对接亚马逊电商平台SP-API的一些概念理解准备

❝ 除了第三方服务商,其实亚马逊卖家本身也可以通过和SP-API的对接,利用程序来自动化亚马逊店铺销售运营管理中很多环节的工作,简单的应用比如可以利用SP-API的对接,实现亚马逊卖家后台各类报表的定期自动下载以及数据分析整理工…