【JAVA】final、finally、finalize 有什么区别?

news2024/10/5 18:52:58

🍎个人博客:个人主页

🏆个人专栏:    JAVA   

⛳️ 功不唐捐,玉汝于成



目录

前言 

正文

final:

        finally:

finalize:

结语

我的其他博客


前言 

在Java中,finalfinallyfinalize 是三个看似相近但用途完全不同的关键字。深入理解它们的特性和用法,对于编写健壮、清晰的Java代码是至关重要的。这三者在Java语言中的不同领域发挥了各自独特的作用,分别用于声明不可变性、异常处理和对象生命周期管理。

正文

finalfinallyfinalize 是 Java 中三个不同的关键字,它们分别用于不同的上下文,有着不同的含义和用途。

  1. final

    • final 是一个关键字,用于修饰类、方法、变量等,表示不可改变的、最终的。

    • 当用于修饰一个类时,表示该类不能被继承,即为最终类。

    • 当用于修饰一个方法时,表示该方法不能被子类重写。

    • 当用于修饰一个变量时,表示该变量是一个常量,只能被赋值一次。

      final class FinalClass {
          // ...
      }
      
      class Example {
          final int constantValue = 42;
      
          final void finalMethod() {
              // ...
          }
      

finally

  • finally 是一个关键字,用于结构化异常处理中的 try-catch-finally 语句块。

  • 无论是否发生异常,finally 语句块中的代码都会被执行,通常用于释放资源、关闭文件等操作。

    try {
        // some code that may throw an exception
    } catch (Exception e) {
        // handle the exception
    } finally {
        // code in this block will always be executed
        // e.g., close resources, cleanup, etc.
    }
    

finalize

  • finalize 是一个方法,属于 Object 类中的一个方法。它在对象被垃圾回收之前被调用,允许对象在销毁之前执行一些清理操作。

  • 注意:Java 9 引入了垃圾回收器的改进,弃用了 finalize 方法,并推荐使用 Cleaner API 进行清理操作。

    class MyClass {
        // ...
    
        @Override
        protected void finalize() throws Throwable {
            try {
                // cleanup code before object is garbage collected
            } finally {
                super.finalize();
            }
        }
    }
    

区别总结:

  • final 是一个修饰符,用于修饰类、方法、变量,表示最终的、不可改变的。
  • finally 是一个关键字,用于异常处理中的 try-catch-finally 结构,确保一段代码块无论是否发生异常都会被执行。
  • finalizeObject 类中的一个方法,用于在对象被垃圾回收之前执行一些清理操作。在现代Java中,它已经被弃用,不推荐使用,而推荐使用 Cleaner API 进行资源清理。

结语

在编写Java代码时,正确地使用 final 修饰符可以使代码更加稳定,finally 关键字可以确保资源得到适当的清理,而 finalize 方法(虽然已被弃用)在一定情况下可以用于对象的清理操作。这三者相辅相成,为我们的代码提供了更高的可读性、可维护性和性能。在日常编程中,善用这三者,能够使我们的代码更加健壮且容易理解。希望通过对它们的深入理解,你能够在实际项目中更加灵活地运用这些关键字,写出更加优雅的Java代码。

我的其他博客

【软件工程】走进敏捷开发:灵活、协作、迭代的软件工艺之旅-CSDN博客

【软件工程】融通未来的工艺:深度解析统一过程在软件开发中的角色-CSDN博客

【软件工程】走进瀑布模型:传统软件开发的经典之路-CSDN博客

【软件工程】走近演化过程模型:软件开发的不断进化之路-CSDN博客

【软件工程】漫谈增量过程模型:软件开发的逐步之道-CSDN博客

【Spring】理解IoC与AOP:构建灵活而模块化的软件架构-CSDN博客

【MySQL】数据库并发控制:悲观锁与乐观锁的深入解析-CSDN博客

【MySQL】数据库规范化的三大法则 — 一探范式设计原则-CSDN博客

【MySQL】数据库中为什么使用B+树不用B树-CSDN博客

【MySQL】SQL优化-CSDN博客

【MySQL】脏读、不可重复读、幻读介绍及代码解释-CSDN博客

【MySQL】多表连接查询-CSDN博客

 【MySQL】数据库索引(简单明了)-CSDN博客

【Web开发】深度剖析RBAC:概念、实现方法、优势及在Web应用中的应用-CSDN博客

【Mybatis】深入学习MyBatis:高级特性与Spring整合-CSDN博客

【Mybatis】深入学习MyBatis:CRUD操作与动态SQL实战指南-CSDN博客

【MySQL】数据库索引(简单明了)-CSDN博客

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

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

相关文章

适合培训协会搭建的培训机构管理系统开发方案

一、项目背景与目标 (一)项目背景 培训学校教务管理系统是培训机构数字化管理的必备系统,该系统功能大大提升机构办学的管理效率、提升机构在家长心中的专业度,市面上的培训机构管理系统收费越来越贵,为了给协会内培…

CMake入门教程【核心篇】静态库 (.a, .lib)

😈「CSDN主页」:传送门 😈「Bilibil首页」:传送门 😈「动动你的小手」:点赞👍收藏⭐️评论📝 文章目录 概述创建静态库添加静态库到你的项目完整代码示例实战使用技巧与注意事项总结与分析概述 静态库在C++开发中扮演着重要的角色。它们通常以.a(在Unix-like系统

django websocket实现聊天室功能

注意事项channel版本 django2.x 需要匹配安装 channels 2 django3.x 需要匹配安装 channels 3 Django3.2.4 channels3.0.3 Django3.2.* channels3.0.2 Django4.2 channles3.0.5 是因为最新版channels默认不带daphne服务器 直接用命令 python manage.py runsever 默认运行的是w…

python协程asyncio的应用,async,await,loop

关于协程,asyncio,async,await,loop的概念,参照上一篇文章可迭代对象,迭代器,生成器,协程-CSDN博客 上一章我们详细的讲解了上述各个名词的概念,但是这些东西实际上该怎…

Dash+Plotly | Web应用开发(1)

本文为https://github.com/CNFeffery/DataScienceStudyNotes的学习笔记,部分源码来源于此仓库。 本期内容主要为基础概念、web布局方法和交互回调。 文章目录 Dash的主要模块Highlightlayoutcallback 惰性交互阻止初次回调忽略回调匹配错误控制部分回调输出不更新获…

计算机毕业设计----SSM场地预订管理系统

项目介绍 本项目分为前后台,前台为普通用户登录,后台为管理员登录; 用户角色包含以下功能: 按分类查看场地,用户登录,查看网站公告,按分类查看器材,查看商品详情,加入购物车,提交订单,查看订单,修改个人信息等功能。 管理员角…

linux安装codeserver实现云端开发

先看图 下载安装包 https://github.com/coder/code-server/releases 找到code-server-版本号-linux-amd64.tar.gz,我这里是code-server-4.16.1-linux-amd64.tar.gz 1、使用acrm用户登录目标服务器 2、切换root用户,创建 vscode 用户,并设…

selenium对于页面改变的定位元素处理办法

在学习selenimu中,总是发现元素定位不到,想了各种办法,最后总结大致有两个原因。 1.等待时间不够,页面还没有完全渲染就进行操作,使用time模块进行等待。 2.换了页面后,发现定位不到元素,因为…

外包做了1个月,技术退步一大半了。。。

先说一下自己的情况,本科生,20年通过校招进入深圳某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

新颖度爆表。网络药理学+PPI+分子对接+实验验证

今天给同学们分享一篇生信文章“The convergent application of metabolites from Avena sativa and gut microbiota to ameliorate non-alcoholic fatty liver disease: a network pharmacology study”,这篇文章发表在J Transl Med期刊上,影响因子为7.…

LeetCode-58/709

1.最后一个单词的长度(58) 题目描述: 给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 思路&…

如何创建容器搭建节点

1.注册Discord账号 https://discord.com/这是登录网址: https://discord.com/ 2.点击startnow注册,用discord注册或者邮箱注册都可,然后登录tickhosting Tick Hosting这是登录网址:Tick Hosting 3.创建servers 4.点击你创建的servers,按照图中步骤进行

Android性能优化系列——内存优化

内存,是Android应用的生命线,一旦在内存上出现问题,轻者内存泄漏造成App卡顿,重者直接crash,因此一个应用保持健壮,要做好内存的使用和优化。网上有很多讲JAVA内存虚拟机的好文章,我就不赘述了。…

嵌入式-C语言-江科大-指针的详解与应用

文章目录 一:计算机存储机制二:定义指针三:指针的操作四:数组与指针五:指针的应用道友:最清晰的脚印,踩在最泥泞的道路上。 推荐视频配合我的笔记使用 [C语言] 指针的详解与应用-理论结合实践&a…

2024年了,难道还不会使用谷歌DevTools么?

我相信您一定对Chrome浏览器非常熟悉,因为它是前端开发者最亲密的伙伴。我们可以使用它查看网络请求、分析网页性能以及调试最新的JavaScript功能。 除此之外,它还提供了许多功能强大但不常见的功能,这些功能可以大大提高我们的开发效率。 让我们来看看。 1. 重新发送XHR…

网络流量分析与故障分析

1.网络流量实时分析 网络监控 也snmp协议 交换机和服务器打开 snmp就ok了 MRTG或者是prgt 用于对网络流量进行实时监测,可以及时了解服务器和交换机的流量,防止因流量过大而导致服务器瘫痪或网络拥塞。 原理 通过snmp监控 是一个…

pyside6 界面美化库的使用

使用qt_material库,在库中进行导入后,直接使用库提供的皮肤即可非常简单 example: # -*- coding: utf-8 -*- # 使用例子 import sys # from PySide6 import QtWidgets # from PySide2 import QtWidgets from PySide6 import QtWidgets from…

CreateDIBSection失败的问题记录

错误记录 [ERROR] (:0, ): QPixmap::fromWinHICON(), failed to GetIconInfo() (操作成功完成。) [ERROR] (:0, ): QPixmap::fromWinHICON(), failed to GetIconInfo() (参数错误。) [ERROR] (:0, ): QPixmap::fromWinHICON(), failed to GetIconInfo() (参数错误。) [ERROR] …

安卓上使用免费的地图OpenStreetMap

前一段使用了微信的地图,非常的好用。但是存在的问题是海外无法使用,出国就不能用了; 其实国内三家:百度,高德,微信都是一样的问题,当涉及到商业使用的时候需要付费; 国外除了谷歌…

每天刷两道题——第十天

1.1和为k的子数组 给你一个整数数组 n u m s nums nums 和一个整数 k k k ,请你统计并返回 该数组中和为 k k k 的子数组的个数 。子数组是数组中元素的连续非空序列。 输入:nums [1,2,3], k 3 输出:2 前缀和 1.2如何使用 前缀和的…