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

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

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

相关文章

汽车免拆诊断案例 | 2016 款吉利帝豪EV车无法加速

故障现象 一辆2016款吉利帝豪EV车,累计行驶里程约为28.4万km,车主反映车辆无法加速。 故障诊断 接车后路试,行驶约1 km,踩下加速踏板,无法加速,车速为20 km/h左右,同时组合仪表上的电机及控制…

设备驱动框架之LED

文章目录 前言一、什么是驱动框架二、使用步骤1.注册LED设备2.卸载LED设备3.内核中申请内存4.container_of5.platform_get_drvdata 和 platform_set_drvdata6.module_platform_driver 三、驱动示例总结 前言 为了尽量降低驱动开发者难度以及接口标准化,就出现了设备…

面试-Java线程池

1.利用Excutors创建不同的线程池满足不同场景的需求 分析: 如果并发的请求的数量非常多,但每个线程执行的时间非常短,这样就会频繁的创建和销毁线程。如此一来,会大大降低系统的效率。 可能出现,服务器在为每个线程创建…

Docker创建容器时提示 [Warning] IPv4 forwarding is disabled. Networking will not work.

解决办法 1. 在docker的宿主机中更改以下文件: [rootlocalhost ~]# vi /usr/lib/sysctl.d/00-system.conf2. 添加如下代码: net.ipv4.ip_forward13. 重启network服务: systemctl restart network

Lua 垃圾回收

Lua 垃圾回收 Lua 是一种轻量级的编程语言,广泛用于游戏开发、脚本编写和其他应用程序。Lua 的设计哲学是简单和高效,这同样体现在它的内存管理机制中。在 Lua 中,垃圾回收(Garbage Collection,简称 GC)是…

利用powershell开展网络钓鱼

要确保人们打开我们的恶意文件并执行它们,我们只需让微软努力工作多年来赢得人们的信任,然后将一些危险的宏插入到幻灯片中。 本博文将介绍如何通过屏幕顶部的一个友好的警告提示,在用户启用宏后立即运行您的宏。 首先,我们需要打…

【面向对象】复习(四)

const构不构成重载 C 加const能不能构成重载的几种情况_多个const修饰可以重载吗-CSDN博客

如何在Java中实现并发编程,包括锁机制、线程池等。

在Java中实现并发编程有很多种方式,包括使用锁机制、线程池等。以下是一些基本的步骤和代码示例: 1. **锁机制**:Java提供了多种锁机制,包括ReentrantLock,synchronized关键字等。ReentrantLock是一个可重入的锁&…

[分布式网络通讯框架]----MprpcApplication实现

在之前我们提到了很多回MprpcApplication类&#xff0c;这是一个mprpc框架的初始化类。 在此之前&#xff0c;先来看看MprpcConfig 类 MprpcConfig 类 重要成员变量 std::unordered_map<std::string,std::string> m_configMap;存放配置信息键值对。 本项目配置信息 …

Spring Boot中的国际化(i18n)实现技巧

Spring Boot中的国际化&#xff08;i18n&#xff09;实现技巧 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;在开发多语言支持的应用程序时&#xff0c;国际化…

python环境变量

目录 python环境变量 python-opencv cuda cudnn pytorch pycharm 激活ok了 pyqt5 labelimg notepad gpu-z python 3.6或3.7 标注,文件路径不能有 python环境变量 import os import syscurrent_dir = os.path.dirname(os.path.abspath(__file__))paths = [os.path.abspath(…

浏览器扩展V3开发系列之 chrome.commands 快捷键的用法和案例

【作者主页】&#xff1a;小鱼神1024 【擅长领域】&#xff1a;JS逆向、小程序逆向、AST还原、验证码突防、Python开发、浏览器插件开发、React前端开发、NestJS后端开发等等 chrome.commands API 允许开发者使用快捷键来执行特定的命令。 在使用 chrome.commands API 之前必须…

Vue 学习之 axios

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

如何查看websocket连接信息

Chrome 浏览器中查看 webSocket 连接信息_谷歌浏览器看不到 websocket-CSDN博客 Getting Started — Flask-SocketIO documentation 运作原理 | Socket.IO

VS Code准备JAVA环境

背景 由于IntelliJ IDEA是需要激活码的,简单的java demo测试,除了可以直接使用命令行java和javac进行执行, 推荐使用VS code, 其功能比较强大,扩展插件也比丰富,对阅读和书写代码都是比较友好的. JDK环境准备 Linux JDK可以使用Open JDK 11. sudo apt-get install openjdk-1…

Git+Maven+Jenkins的增量发布

项目结构大致如下&#xff1a; platform-server ├─doc ├─platform-base ├─platform-bom-dependencies ├─platform-commons │ ├─platform-commons-core │ ├─platform-commons-dubbo │ ├─platform-commons-geo │ ├─platform-commons-lang │ ├─platf…

UE引擎实现ShadowMap、体积光(C++)

前言 整体上参考了YivanLee大佬的这两篇文&#xff1a; 虚幻4渲染编程&#xff08;灯光篇&#xff09;【第一卷&#xff1a;各种ShadowMap】 虚幻4渲染编程&#xff08;灯光篇&#xff09;【第二卷&#xff1a;体积光】 正文 1、ShadowMap &#xff08;1&#xff09;创建工…

【浦语开源】深入探索:大模型全链路开源组件 InternLM Lagent,打造灵笔Demo实战指南

一、准备工作&#xff1a; 1、环境配置&#xff1a; pip、conda换源&#xff1a; pip临时换源&#xff1a; pip install -i https://mirrors.cernet.edu.cn/pypi/web/simple some-package# 这里的“https://mirrors.cernet.edu.cn/pypi/web/simple”是所换的源&#xff0c;…

C++设计模式---模版方法模式

1、介绍 概念&#xff1a; 模板方法模式&#xff08;Template Method Pattern&#xff09;【行为型模式】&#xff0c;定义一个操作中算法的骨架&#xff0c;而将一些步骤延迟到子类中&#xff0c;模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 …

AI绘画Stable Diffusion人物背景替换实操教程,让创意无限延伸

大家好&#xff0c;我是画画的小强 Stable Diffusion以其强大的能力可以实现人物背景的更换。本文将带你深入了解如何利用Stable Diffusion中的Inpaint Anything插件快速且精准地实现人物背景的替换&#xff0c;从而让你的图片焕发新生。 前期准备 本文会使用到Inpaint Anyt…