Java中的final关键字,你清楚吗?

news2024/11/25 21:44:26

 

前言

在学习Java基础阶段应该都认识关键字 final,在声明常量和匿名内部类时都会用到它。我们最熟悉的 String 类就是 final类,如果经常查看API源码,肯定还会遇到其他 final类。本篇就来深入了解一下关键字 final,加深对它的运用。

概览

可用来做什么

  • 修饰变量

这个很常见,Java中在声明常量时,就会用 final 来修饰。被 final 修饰的变量只能赋值一次,之后不能再被修改。

final int a = 1;
a = 4; // 编译报错
复制代码

有一点值得注意,这里是说只能赋值一次,并不是说一定要在声明变量时直接初始化,下面语句也是没有问题的

final int a;
if (foo()) {
    a = 3;
} else {
    a = 4;
}
复制代码

特别说明:

一个final变量,若是基本数据类型,则其一旦在初始化之后便不能更改;若是引用类型,则在对其初始化之后便不能让其指向另一个对象。

  • 修饰方法

某些业务场景下,一个方法不需要子类来重写,就可以用 final 来修饰该方法。另一方面,java虚拟机遇到 final 方法会直接简便处理,因为虚拟机清除 final 方法不会被子类继承,可以说对性能上有所优化。

  • 修饰类

一个类不想被继承,就可以使用 final 来修饰。

final变量,普通变量和static 变量

  • 普通变量

正常声明使用的变量,如 int a = 10

  • static变量

由关键字 static 修饰变量,在java中直接通过类名调用静态变量,如 static string b = "琪琪"

  • final 变量

最常见的 final 变量就是声明常量,其他场景倒是不多见。

final类型参数

void changeValue(final int i);
复制代码

如上面方法声明中,参数由 final 关键字修饰,在java中参数传递采用的是值传递,对于基本类型的变量,相当于直接将变量进行了拷贝。即使没有final修饰的情况,在方法内部改变了变量值也不会影响方法外i。

使用final的好处

  • 在多线程条件下,会有很大的优势。如果共享数据都是不可变的(final),可以省去构造时的多线程同步。

  • final类和方法能提升性能,虚拟机知道它们不会被继承或者重写,就可以做一些优化。

  • final变量能提升可读性,无论全局变量还是局部变量,加上final修饰,变量的值不会再改变,无疑会大大增加可读性。

 

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

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

相关文章

java计算机毕业设计ssm线上拍卖系统设计6luor(附源码、数据库)

java计算机毕业设计ssm线上拍卖系统设计6luor(附源码、数据库) 项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff0…

CRC 循环冗余检验【计网必考】

CRC 循环冗余检验作为一个重点,也是数据链路层必考的一个考点,所以我把差错检测单独拿出来分析一起看一下。总结不易,一个简单的攒,Thanks♪(・ω・)ノ 目录 一、介绍及工作原理 二、校验计算过程…

zookeeper四字命令_java培训

zookeeper支持某些特定的四字命令,他们大多是用来查询ZK服务的当前状态及相关信息的, 通过telnet或nc向zookeeper提交相应命令,如:echo ruok | nc 127.0.0.1 2181 运行公式:echo 四字命令 | nc 主机IP zookeeper端口…

一文读懂Linux内存分配策略

转载:一文读懂Linux内存分配策略-今日头条 (toutiao.com) 在 Linux 操作系统中,虚拟地址空间的内部又被分为内核空间和用户空间两部分,不同位数的系统,地址空间的范围也不同。比如最常见的 32 位和 64 位系统,如下所示…

r语言中对LASSO回归,Ridge岭回归和弹性网络Elastic Net模型实现

原文链接:http://tecdat.cn/?p3795Glmnet是一个通过惩罚最大似然关系拟合广义线性模型的软件包。正则化路径是针对正则化参数λ的值网格处的lasso或Elastic Net(弹性网络)惩罚值计算的(点击文末“阅读原文”获取完整代码数据&…

[附源码]JAVA毕业设计社区图书馆借阅管理系统(系统+LW)

[附源码]JAVA毕业设计社区图书馆借阅管理系统(系统LW) 项目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项…

【微服务】版本确认完成,传统方式安装Nacos

目录安装Nacos1.4.1【微服务】SpringCloud和SpringBoot版本选择 【微服务】传统方式安装Nacos 安装Nacos1.4.1 Github地址:https://github.com/alibaba/nacos/releases Nacos1.4.1版本下载地址:https://github.com/alibaba/nacos/releases/download/1.…

170-本地WIFI测试环境配置IP

前几天的时候 博客被删了好多好多篇 算一下 现在是169 按道理的话应该总数是1169的 但是现在只剩下1157了 所以就是被删除了12篇 算了 问题不大 被删了就被删了吧 最近心情真的很不好 五月份的事情一直到现在还是没有走出来 我估计可能要等到下一次自己赚到钱了之后…

基于轨迹优化的自动驾驶汽车跟随自行车模型动力学控制(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 本次使用轨迹优化技术来控制汽车。假设汽车遵循自行车模型的动力学。为了实现稳定和安全的跟踪,我们使用了离散时间…

微信内嵌H5调用相机及支付相关问题

前言 进来项目在做公众号,遇到了一些问题及解决方案,在这里进行记录及分享,希望给大家带来一丝帮助 手机上控制台调试我建议使用vConsole(npm install vconsole) 微信内嵌H5的相机调用 微信内嵌H5我们需要调用扫码功能,则需要用…

如何发布WMS/WMTS离线地图服务

介绍: WMTS(OpenGIS Web Map Tile Service)当前版本是1.0.0。WMTS标准定义了一些操作,这些操作允许用户访问切片地图。WMTS可能是OGC首个支持RESTful访问的服务标准。 WMTS的原理和操作 如果知道一个请求的边界范围&#x…

浅谈用Redis实现分布式锁的方案及细节

前言 我们都知道,在面对并发问题时,有加锁操作和保证原子操作两种解决方案。当我们采用加锁操作的时候,因为Redis多采用集群的方式部署,因此我们就需要考虑到锁在分布式系统中使用的注意事项。接下来就看看Redis的分布式锁问题。…

【檀越剑指大厂—Spring】Spring高阶篇

一.基础概念 1.模块 2.Spring 框架概述。 Spring 是轻量级的开源的 JavaEE 框架 Spring 可以解决企业应用开发的复杂性 Spring 有两个核心部分: IOC 和 AOP IOC:控制反转,把创建对象过程交给 Spring 进行管理 Aop:面向切面,不修改源代码进行功能增强…

SpringBoot办公管理系统oa人力人事办公(含源码+论文+答辩PPT等)

项目功能简介: 本项目含代码详细讲解视频,手把手带同学们敲代码从0到1完成项目 该项目采用技术SpringBoot、SpringMvc(接入层框架)Spring(中间层框架)Hibernate(持久层框架)JPAMD5加密、Tomcat服务器、MySQL数据库 项目含有源码、配套开发软件…

R语言多元动态条件相关DCC-MVGARCH、常相关CCC-MVGARCH模型进行多变量波动率预测...

全文下载链接:http://tecdat.cn/?p23287在本文中,当从单变量波动率预测跳到多变量波动率预测时,我们需要明白,现在我们不仅要预测单变量波动率元素,还要预测协方差元素(点击文末“阅读原文”获取完整代码数…

web安全之通过sqlmap工具进行靶场练习

目录 基础语法 get类型的注入 post类型的注入 基础语法 -u:用于get提交方式,后面跟注入的url网址 --dbs:获取所有数据库 --tables:获取所有数据表 --columns:获取所有字段 --dump:打印数据 -D:查询选择某…

火到爆的扩散模型(Diffusion Model)帮你具象化幻想世界

Diffusion Model 如果你对人工智能有所了解,想必已经听说过Diffusion Model了。如果还没有,那就一起来了解一下吧—— 扩散(Diffusion)对于人能智能而言,是一个借用的概念。在热力学中,它指细小颗粒从高密度…

调节盘的三维建模及加工工艺规程设计

目录 1 调节盘分析 - 1 - 1.1 调节盘结构特点 - 1 - 1.2 调节盘的工艺分析 - 2 - 1.3 调节盘的技术要求 - 3 - 2 毛坯的选择 - 4 - 2.1 毛坯的类型 - 4 - 2.2 毛坯余量的确定 - 4 - 2.3 毛坯草图 - 5 - 3 工艺规程设计 - 6 - 3.1 定位基准的选择 - 6 - 3.1.1 粗基准的选择 - 6 …

2022系统分析师下午卷(案例分析)

试题一(共 25 分) 阅读以下关于软件系统分析与建模的叙述,在答题纸上回答问题 1 至问题 3。 【说明】 某软件公司拟开发一套博客系统,要求能够向用户提供一个便捷发布自已心得,及时有效的与他人进行交流的平台。新用户…

新手学习3D建模,弯道超车攻略!

你做三四月的事,在八九月自有答案。​ – 余世存 📝学建模最重要的是每天抽时间练习 🌻给大家准备了200天建模打卡攻略练习素材 📔人体解剖雕塑学(骨骼、肌肉等电子版💯) 📒3dmax…