final的详解

在Java中,final 关键字用于表示不可改变的实体,可以应用于变量、方法、类和指令重排序。它有不同的作用,具体取决于它被应用的上下文。

1.对于变量:

  • 如果一个变量被声明为 final,则该变量的值在一旦被赋予后就不能再被修改。这使得变量成为常量,适用于不希望被改变的值,例如常量值或配置参数。

  • 但是一个变量如果是对象的话,就是它指向的对象地址不能改变,但是对象的内容可以改变

public class TestFinal {public static void main(String[] args) {final Father father=new Father();father.name="修改父亲";father=new Father();}
}

2.对于方法:

  • 如果一个方法被声明为 final,那么该方法不能被子类重写。这提供了一种保护机制,确保子类不能改变或覆盖该方法的行为。

     

3.对于类:

  • 如果一个类被声明为 final,则该类不能被继承。这样可以防止其他类继承该类并修改其行为,提供了一种确保类的不可变性的方式。

4. final在某些情况下可以防止指令重排序。

        具体来说,当一个字段被声明为 final 时,对这个字段的写操作(初始化以及在构造方法中的写操作)在构造函数结束时会对其他线程可见,而不会发生重排序。

        这是因为,根据Java内存模型(Java Memory Model,JMM),在构造函数内,所有写操作都在构造函数结束前对其他线程可见。使用 final 关键字可以进一步确保,即使在构造函数中存在一些复杂的初始化逻辑,其他线程也能够正确地看到 final 字段的最终状态。

        总的来说,final 提供了一种限制和确保代码行为不可变性的机制,从而提高代码的安全性和可维护性。

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

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

相关文章

SLAM算法与工程实践——RTKLIB编译

SLAM算法与工程实践系列文章 下面是SLAM算法与工程实践系列文章的总链接,本人发表这个系列的文章链接均收录于此 SLAM算法与工程实践系列文章链接 下面是专栏地址: SLAM算法与工程实践系列专栏 文章目录 SLAM算法与工程实践系列文章SLAM算法与工程实践…

selenium css定位

selenium-css定位 element_css driver.find_element(By.CSS_SELECTOR, css表达式)css定位说明 selenium中的css定位,实际是通过css选择器来定位到具体元素,css选择器来自于css语法 css定位优点 语法简洁对比其他定位方式,定位效率更快对…

MyBatis的ORM!!!

首先你要明白为什么使用ORM:我们看一个示例,我们发现我们要声明的pojo类中的属性名和数据库中的字段名不一致,这时就需要我们使用MyBatis的ORM。 首先还是准备工作: 1.创建Maven工程,还没有配置Maven的和还不会的去看这…

macOS系统下载百度网盘的操作流程

第一步 进入百度网盘的官网,链接:百度网盘-免费云盘丨文件共享软件丨超大容量丨存储安全​​​​​​​,选择“客户端下载” 第二步 根据自己的电脑配置选择版本进行下载。芯片的查看路径是系统设置-通用-关于本机 第三步 点击右上角的图标…

Linux线程——条件变量

什么是条件变量 条件变量是线程另一可用的同步机制。条件变量给多个线程提供了一个会合的场所。条件变量与互斥量一起使用时,允许线程以无竞争的方式等待特定的条件发生。 条件本身是由互斥量保护的。线程在改变条件状态前必须首先锁住互斥量,其他线程…

Python爬虫---解析---xpath

1.1 安装xpath: 点击安装Xpath 1.2 将安装好的程序解压,打开浏览器,找到程序扩展,把解压好的程序托进来,如下图所示: 1.3 设置快捷键:打开/关闭xpath 1.4 成功后的图例:按刚刚设…

MatGPT - 访问 OpenAI™ ChatGPT API 的 MATLAB® 应用程序

系列文章目录 前言 MatGPT 是一款 MATLAB 应用程序,可让您轻松访问 OpenAI 的 ChatGPT API。使用该应用程序,您可以加载特定用例的提示列表,并轻松参与对话。如果您是 ChatGPT 和提示工程方面的新手,MatGPT 不失为一个学习的好方…

Linux网络编程(一):网络基础(上)

参考引用 UNIX 环境高级编程 (第3版)嵌入式Linux C应用编程-正点原子 1. 网络通信概述 网络通信本质上是一种进程间通信,是位于网络中不同主机上的进程之间的通信,属于 IPC 的一种,通常称为 socket IPC,网络通信是为了解决在网络…

【ARM Trace32(劳特巴赫) 高级篇 21 -- Trace 系统性能分析 Performance Analyzer】

请阅读【Trace32 ARM 专栏导读】 文章目录 Performance AnalyzerPerf 操作步骤采样对象PC采样对象Memory采样对象 TaskPerformance Analyzer sample-based profiling 通常也叫做Trace32 的性能分析(Perf), 这个功能是通过周期性的采样来实现的。被采样到的数据可以被用于统计…

跨平台数据库管理软件Navicat Premium 16 mac高级功能

Navicat Premium 16 mac是一款功能强大的跨平台数据库管理工具,支持多种数据库类型,如MySQL、MariaDB、Oracle、SQLite、PostgreSQL等等。它提供了丰富的数据库管理功能和工具,可以帮助开发人员和数据库管理员快速地创建、管理和维护数据库。…

面向 NLP 任务的大模型 Prompt 设计

很久之前,我们介绍到,prompt是影响下游任务的关键所在,当我们在应用chatgpt进行nlp任务落地时,如何选择合适的prompt,对于SFT以及推理环节尤为重要。 不过,硬想不是办法,我们可以充分参考开源的…

14:00面试,14:08就出来了,问的问题有点变态。。。

从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到5月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%…