【面试干货】final、finalize 和 finally 的区别

【面试干货】final、finalize 和 finally 的区别

  • 1、final
    • 1.1 修饰类
    • 1.2 修饰方法
    • 1.3 修饰变量
  • 2、finally
  • 3、finalize
  • 4、总结


💖The Begin💖点点关注,收藏不迷路💖

在Java编程语言中,final、finalize和finally都是关键字,但它们各自拥有不同的用途和含义。下面我们将逐一介绍这三个关键字,并解释它们之间的区别。

1、final

final是一个修饰符,它可以用来修饰类、方法或变量。其主要目的是表示某种“不可变性”。

1.1 修饰类

当final修饰一个类时,这个类就不能被继承。即,你不能创建该类的子类。

final class FinalClass {  
    // ...  
}  
  
// 尝试继承FinalClass将会导致编译错误  
class AnotherClass extends FinalClass {  
    // 编译错误:FinalClass是final的,不能被继承  
}

1.2 修饰方法

当final修饰一个方法时,这个方法就不能被子类重写。即,子类不能提供该方法的不同实现。

class Parent {  
    final void finalMethod() {  
        // ...  
    }  
}  
  
class Child extends Parent {  
    // 编译错误:finalMethod()在Parent中已被声明为final,不能被重写  
    void finalMethod() {  
        // ...  
    }  
}

1.3 修饰变量

当final修饰一个变量时,这个变量的值在初始化之后就不能被改变。对于引用类型的变量,这表示引用本身不能被改变(即不能再指向其他对象),但引用的对象内部的状态是可以改变的。

final int finalVariable = 10;  
// finalVariable = 20; // 这会导致编译错误,因为finalVariable的值一旦被初始化就不能再改变  
  
final StringBuilder sb = new StringBuilder("Hello");  
sb.append(" World"); // 这是允许的,因为只是改变了对象的状态,而不是改变了引用本身

2、finally

finally是异常处理结构try-catch-finally的一部分。无论是否发生异常,finally块中的代码都会被执行。这通常用于执行清理操作,如关闭文件、数据库连接等。

try {  
    // 尝试执行一些可能会抛出异常的代码  
} catch (Exception e) {  
    // 处理异常  
} finally {  
    // 无论是否发生异常,这里的代码都会被执行  
    // 执行清理操作,如关闭文件、数据库连接等  
}

3、finalize

finalize是Object类的一个方法,它在对象被垃圾收集器回收之前调用。然而,不建议在应用程序中依赖finalize方法来进行资源清理。

因为Java的垃圾收集器是不确定性的,也就是说,你无法知道垃圾收集器何时会运行,这可能导致资源释放被延迟。从Java 9开始,finalize方法已经被标记为已弃用(deprecated),并在Java 12中被移除。

相反,应该使用try-with-resources语句或显式地在不再需要资源时关闭它们。

例如,对于实现了AutoCloseable或Closeable接口的资源(如文件流、数据库连接等),可以使用try-with-resources语句来自动管理资源的关闭。

public class FileReaderExample {  
    public static void main(String[] args) {  
        // 尝试使用try-with-resources语句读取文件  
        try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {  
            // 使用br进行文件读取操作  
            String line;  
            while ((line = br.readLine()) != null) {  
                System.out.println(line); // 打印文件的每一行  
            }  
              
            // 注意:这里不需要显式调用br.close(),因为try-with-resources会自动处理  
            // 当try块结束时,br会被自动关闭  
              
        } catch (IOException e) {  
            // 处理异常  
            e.printStackTrace(); // 打印异常的堆栈跟踪  
            System.err.println("读取文件时发生错误。"); // 向标准错误输出错误信息  
        }  
          
        // 在这里,br已经被自动关闭,无需再调用close()方法  
        // 你可以继续执行其他代码,而不用担心资源泄露  
    }  
}

4、总结

1、final 用于声明属性、方法和类,表示属性不可变、方法不可覆盖和类不可继承。

2、finally 是异常处理语句结构的一部分,用于确保代码块无论是否发生异常都会被执行。

3、finalize 是 Object 类的方法,用于在对象被垃圾回收前进行资源清理。
在这里插入图片描述


💖The End💖点点关注,收藏不迷路💖

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/748307.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Unity】Timeline的倒播和修改速度(无需协程)

unity timeline倒播 一、核心: 通过playableDirector.playableGraph.GetRootPlayable(i).SetSpeed(speed)接口,设置PlayableDirector的速度。 二、playableGraph报空 若playableDirector不勾选Play On Awake,则默认没有PlayableGraph,需执行playableDirector…RebuildGr…

基于STM32的简易智能家居设计

一、项目功能概述 1、OLED显示温湿度、空气质量,并可以设置报警阈值 2、设置4个继电器开关,分别控制灯、空调、开关、风扇 3、设计一个离线语音识别系统,可以语音控制打开指定开关、并且可以显示识别命令词到OLED屏上 4、OLED实时显示&#…

仓颉编程语言全攻略:学习秘籍+内测资格申请秘籍!

仓颉官网简介 仓颉编程语言是一款面向全场景智能的新一代编程语言,主打原生智能化、天生全场景、高性能、强安全。融入鸿蒙生态,为开发者提供良好的编程体验。 官网直达:https://developer.huawei.com/consumer/cn/cangjie/ 华为开发者官网…

分文件编译

分文件编译 为什么分文件编译 防止主文件过大,不好修改,简化编译流程 编译 分文件编译代码需要将多个.c文件联合编译 功能函数格式.c #include "函数名.h" 函数 头文件格式.h #ifndef __文件名大写_H__ #define __文件名大写_H__ 功能函数…

关于WebSocket

WebSocket 与传统的 HTTP 协议对比 在实时通信领域,传统的 HTTP 协议存在以下一些问题: 频繁的请求和响应:每次通信都需要建立和关闭连接,带来额外的开销。高延迟:每次通信都需要经过多个网络层的传输,延…

“论模型驱动架构设计方法及其应用”写作框架,软考高级,系统架构设计师

论文真题 模型驱动架构设计是一种用于应用系统开发的软件设计方法,以模型构造、模型转换和精化为核心,提供了一套软件设计的指导规范。在模型驱动架构环境下,通过创建出机器可读和高度抽象的模型实现对不同问题域的描述,这些模型…

「Java开发指南」如何使用Spring注释器实现Spring控制器?(二)

本教程将引导您使用Spring Annotator实现Spring控制器,标准Java类被添加到搭建项目中,Spring Annotator Spring启用Java类。 虽然本教程的重点是Spring控制器,但是Spring Annotator也可以用于Spring服务、组件和存储库。在本教程中&#xff…

吴恩达机器学习作业ex5:正则化线性回归和偏差VS方差(Python实现)详细注释

文章目录 1.正则化线性回归1.1 可视化数据集1.2 正则化线性回归成本函数1.3 正则化线性回归梯度1.4 拟合线性回归 2 偏差-方差2.1 学习曲线 3.多项式回归3.1 学习多项式回归3.2 正则化参数的调整3.3 使用交叉验证集选择 λ3.4 计算测试集误差 1.正则化线性回归 在练习的前半部…

探索 JQuery EasyUI:构建简单易用的前端页面

介绍 当我们站在网页开发的浩瀚世界中,眼花缭乱的选择让我们难以抉择。而就在这纷繁复杂的技术海洋中,JQuery EasyUI 如一位指路明灯,为我们提供了一条清晰的航线。 1.1 什么是 JQuery EasyUI? JQuery EasyUI,简单来…

Xilinx FPGA:vivado实现串口的接收端

补充一些串口里用到的数值的相关知识点 接收端串口时序图: 程序设计: timescale 1ns / 1ps /串口接收端 串行转并行 module uart_rx(input sys_clk ,input rst_n ,input rx_data , //输入…

导出excel带图片

文章目录 前言一、根据图片路径转为图片总结 前言 列表数据导出,带图片,图片为 http://xxxxx/1.jpg 这种 如何处理图片就是重点 一、根据图片路径转为图片 废话不多说,直接上代码 书接上文: 通用导出 // 多个sheetfor (Sheet sheet : writer.getSheets()) {// 循环每一条数据…

构建网络图 (JavaScript)

前序:在工作中难免有一些千奇百怪的需求,如果你遇到构建网络图,或者学习应对未来,请看这边文章,本文以代码为主。 网络图是数据可视化中实用而有效的工具,特别适用于说明复杂系统内的关系和连接。这些图表…

等保1.0与2.0:物理环境安全的演进之路

在信息安全的大厦中,物理环境安全是那坚实的基础,承载着整个信息系统的稳定与安全。随着时间的推移,我国的信息安全等级保护标准也在不断地进化与完善,从等保1.0到等保2.0,不仅仅是数字上的递增,更是对物理…

【黑龙江哪些行业需要做等保?】

黑龙江等保测评是衡量企业网络安全水平的一项主要指标,包括:金融,能源,电信,医疗,教育,交通,制造,电商等。 等保测评是黑龙江省信息化建设的重要组成部分,也…

Qt篇——获取Windows系统上插入的串口设备的物理序号

先右键【此电脑-管理- 设备管理器-端口(COM和LPT)】中找到我们插入的某个设备的物理序号,如下图红色矩形框出的信息,这个就是已插入设备的物理序号(就是插在哪个USB口的意思)。 在Linux下我们可以通过往/et…

linux下安装kkFileView4

kkFileView为文件文档在线预览解决方案,该项目使用流行的spring boot搭建,易上手和部署,基本支持主流办公文档的在线预览,如doc,docx,xls,xlsx,ppt,pptx,pdf,txt,zip,rar,图片,视频,音频等等 安装kkFileView前需要安装LibreOffic…

螺栓常用的防松方法

螺栓防松原理可以分为三种:摩擦防松、机械防松和永久防松。摩擦防松与机械防松为可拆卸防松,而永久防松为不可拆卸防松。 永久防松平常接触较少,这里只简单介绍一下常用的永久防松方法有:点焊、铆接、粘合等。这些方法在拆卸时大多要破坏螺纹紧固件&…

SAP ERP公有云(全称 SAP S/4HANA Cloud Public Edition),赋能企业成为智能可持续的企业

在数字化浪潮中,每一家企业都需要应对快速的市场变化,不断追求降本增效,为创新提供资源,发展新的业务模式,安全无忧地完成关键任务系统的转型。 10年前,SAP进入云领域,用云ERP和覆盖全线业务的云…

【C++题解】1714. 输出满足条件的整数4

问题:1714. 输出满足条件的整数4 类型&#xff1a;简单循环 题目描述&#xff1a; 输出 1∼n 中含有数字 3 或者含有数字 5 &#xff0c;且因数有 2 &#xff08;即能被 2 整除&#xff09;的所有整数。&#xff08;n<1000&#xff09; 输入&#xff1a; 从键盘输入一个…

使用深度远程启动管理器配置BMC DHCP管理地址的方法

目录 1.请确保服务器BMC是DHCP状态&#xff0c;才可以使用深度工具分配地址&#xff1b;若BMC配置过静态地址&#xff0c;请使用静态地址登录&#xff1b; 2.配置好自己笔记本的 ip&#xff08;例如&#xff1a;192.168.78.1&#xff09;&#xff0c;用网线与 ipmi 独立管理口…