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

news2024/11/18 21:37:41

【面试干货】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💖点点关注,收藏不迷路💖

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

flask的基本使用1

【 一 】Flask介绍 python 界的web框架 -Django:大而全,使用率较高 :https://github.com/django/django -FastAPI:新项目选择使用它:https://github.com/tiangolo/fastapi -flask:公司一些小项目使用它&a…

12.xss之js输出

12.xss之js输出 后台源码文件 输出的源码 输入1111之后能看到心中所爱 查看页面代码元素&#xff0c;1111在js中&#xff0c;如图所示&#xff1a; 接下来将这段代码复制出来进行编辑攻击代码 <script>$msx</script><script>alert("Xss"…

电阻屏和电容屏

目录 一、电阻屏 1.欧姆定律 2.电阻屏原理 &#xff08;1&#xff09;测量 X 坐标 &#xff08;2&#xff09;测量 Y 坐标 3.电阻屏数据 二、电阻屏 1.原理 2.电容屏数据 &#xff08;1&#xff09;Type A &#xff08;2&#xff09;Type B 3.电容屏的实验数据 一、…

Vue 学习之 axios

目录 执行安装命令&#xff1a;npm install axios 使用的时候导入 axios以data&#xff0c;params&#xff0c;headers传参方式的区别 axios封装 是一个基于 promise 的 网络请求库&#xff0c;作用于浏览器和 node.js 中。使用Axios可以在前端项目中发送各种方式的HTTP请求…

【redis】redis安装

1、安装前准备 1.1环境准备 VMware安装 参考博文&#xff1a;【VMware】VMware虚拟机安装_配置_使用教程_选择虚拟机配置选项,设置dvd镜像为 点击启动虚拟机-CSDN博客 安装centOS的linux操作系统 xshell xftp 参考博文&#xff1a;【Linux】Xshell和Xftp简介_安装_VMwar…

经验分享,免费商标查询网站

有时候想快速查询商标状况&#xff0c;官方网站比较慢&#xff0c;这里分享一个免费快速的网站。 网址&#xff1a;https://www.sscha.com/ 截图&#xff1a;

《Redis设计与实现》阅读总结-3

第 12 章 事件 Redis服务器是一个事件驱动程序&#xff0c;服务器需要处理两类事件&#xff1a;文件事件和时间事件 一、文件事件 1. 文件处理器&#xff1a;Redis基于Reactor模式开发了自己的网络事件处理器被称为文件处理器 文件事件处理器使用I/O多路复用程序来同时监听多…

vue 中监听生命周期事件

vue 中监听生命周期事件 常见的添加自定义事件的写法希望在子组件挂载时通知父组件在模板上监听组件生命周期vue3 生命周期事件吗&#xff1f;jsx 中如何监听生命周期事件呢&#xff1f;通过 vNode 操作 html vue3 父子组件的生命周期的执行顺序是怎样的&#xff1f;小结 vue2 …

Swift中的二分查找:全面指南

Swift中的二分查找&#xff1a;全面指南 简介 二分查找是计算机科学中的经典算法&#xff0c;被广泛用于在已排序的数组中高效地搜索目标值。与线性查找逐个检查每个元素不同&#xff0c;二分查找不断将搜索区间减半&#xff0c;因此在处理大数据集时要快得多。 在这篇博客中…

FairyGUI框架下unity发布微信小游戏问题记录

一、unity发布微信小游戏中文字体不显示 在unity中发布WebGl项目时&#xff0c;如果使用的是默认字体就会出现中文字体丢失现象。 这个是在unity中 这个是在微信开发者工具里面显示的 解决办法&#xff1a; 打开我的电脑 C:\Windows\Fonts 随便找一个文件结尾为.ttf的字体…

如何实现系统重装和还原?电脑重装系统的详细介绍(内附系统还原教程)

我们使用电脑办公时&#xff0c;如果出现卡顿、运行缓慢、蓝屏崩溃或病毒感染时&#xff0c;可以通过重装系统的方法来解决。但是电脑系统还原和系统重装都比较麻烦&#xff0c;很多电脑小白跟小编一样&#xff0c;无从下手。 系统重装&#xff1a;重装系统则是将电脑系统完全清…

化茧成蝶 | 继HuggingFace首家落地大模型具身智能场景

关于具身智能的起源 近年来&#xff0c;大语言模型&#xff08;LLMs&#xff09;的兴起给机器人领域带来了革命性的改变&#xff0c;大模型赋予了传统机器人理解和推理的能力&#xff0c;让具身智能这一概念再度出现在大众的视角中。OpenCSG 作为国内 AI 开源社区的先锋&#…

如何快速解决验证码图像问题 | 最佳图像(OCR)验证码解决工具

你是否曾经遇到过陷入一个看似无尽的 CAPTCHA 挑战中&#xff0c;努力识别扭曲的字符或数字&#xff1f;这些令人抓狂的 CAPTCHA 是为了确保你是人类而不是机器人&#xff0c;但它们也给真正的用户带来了头痛。那么&#xff0c;有没有快速解决这些 CAPTCHA 图像的方法&#xff…

Python jsonschema库:数据验证的强大工具

更多Python学习内容&#xff1a;ipengtao.com 在处理JSON数据时&#xff0c;验证其结构和内容的正确性至关重要。jsonschema是一个用于描述和验证JSON文档结构的标准&#xff0c;Python的jsonschema库是实现这一标准的强大工具。本文将详细介绍jsonschema库的功能、安装与配置、…

安卓webview加载vue打包后的项目

<?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"package"ty.sql.dqwgsw"><uses-permission android:name"android.permission.INTERNET" /&g…

需求之 实现获取调试信息在h5页面,在手机端可以查看调试(二)

事实证明 chatgpt很好用&#xff0c;有不懂的问题可以问它 https://zhuanlan.zhihu.com/p/690118775 国内外9个免费的ChatGPT网站 我筛选出来的比较好用免费的网站 fchat.dykyzdh.cn/ 这个也可以 阿里云的 通义灵码 在vscode中安装使用 而且阿里云有一个产品&#xff0c;可以…

国产音频放大器工作原理以及应用领域

音频放大器是在产生声音的输出元件上重建输入的音频信号的设备&#xff0c;其重建的信号音量和功率级都要理想&#xff1a;如实、有效且失真低。音频范围为约20Hz&#xff5e;20000Hz&#xff0c;因此放大器在此范围内必须有良好的频率响应&#xff08;驱动频带受限的扬声器时要…

STM32F1+HAL库+FreeTOTS学习1——FreeRTOS入门

STM32F1HAL库FreeTOTS学习1——FreeRTOS入门 裸机开发与操作系统嵌入式操作系统简介FreeRTOS简介FreeRTOS的几个重要概念任务调度器任务状态状态列表 裸机开发与操作系统 在以往的嵌入式学习中&#xff0c;我们最常用的就是裸机开发&#xff0c;所谓裸机开发就是指在没有操作系…

AI开发Windows环境搭建

文章目录 1. GPU 支持检查2. 安装 Anaconda3. 创建 PyTorch 虚拟环境3.2 创建虚拟 PyTorchEnv 环境3.3 检查、激活、推出虚拟环境3.4 虚拟环境中python包管理3.5 虚拟环境中安装 PyTorch 框架 4. TensorFlow 安装 1. GPU 支持检查 打开 Task Manager (任务管理器&#xff09;&…

使用VMware创建Ubuntu 24.04【一】

相关链接下载地址 VMware https://www.vmware.com/content/vmware/vmware-published-sites/cn/products/workstation-pro/workstation-pro-evaluation.html.html.html Ubuntu 24.04 LTS https://cn.ubuntu.com/download/desktop 虚拟机创建 1、打开VNware软件&#xff0c;点…