Java-final关键字详解

Java-final关键字详解

 一、引言

二、什么是 final 关键字?

三、final 变量

final 局部变量

final 实例变量

final 静态变量

四、final 方法

五、final 类

六、final 关键字的实际应用

1. 定义常量

2. 防止方法被重写

3. 创建不可变类

4. 优化性能

七、final 的一些常见误区

1. final 变量不能在构造方法中赋值

2. final 类中的所有方法都是 final 的

3. final 变量的引用不能改变

结论


🎈边走、边悟🎈迟早会好

 一、引言

final 关键字在 Java 中是一种修饰符,可以用于变量、方法和类。它的主要作用是控制这些元素的可变性和继承行为。本文将详细介绍 final 关键字的各种用法及其实际应用,并澄清一些常见的误区。

二、什么是 final 关键字?

final 关键字可以应用于变量、方法和类,以表示这些元素是不可改变的或是最终的。具体来说,final 变量一旦初始化后就不能再修改;final 方法不能被子类重写;final 类不能被继承。

三、final 变量

final 变量是指一旦被赋值后就不能再更改其值的变量。根据其作用范围和生命周期,可以分为局部变量、实例变量和静态变量。

final 局部变量

final 局部变量是在方法内部定义的,并且一旦赋值后便不能再改变。

public void exampleMethod() {final int localVar = 10;// localVar = 20; // This would cause a compilation error
}

final 实例变量

final 实例变量是在类的实例中定义的,并且必须在对象构造完成前赋值。可以在声明时直接赋值,也可以在构造方法中赋值。

public class ExampleClass {final int instanceVar;public ExampleClass(int value) {instanceVar = value;}
}

final 静态变量

final 静态变量是类级别的常量,必须在声明时或在静态初始化块中赋值,且一旦赋值后就不能再改变。

public class ExampleClass {static final int staticVar = 10;static {// staticVar = 20; // This would cause a compilation error}
}

四、final 方法

final 方法是指不能被子类重写的方法。在父类中声明某个方法为 final,可以防止该方法在子类中被修改。

public class ParentClass {public final void finalMethod() {// Method implementation}
}public class ChildClass extends ParentClass {// public void finalMethod() { // This would cause a compilation error// }
}

五、final

final 类是指不能被继承的类。将一个类声明为 final,可以确保该类的实现不会被任何子类修改。

public final class FinalClass {// Class implementation
}// public class SubClass extends FinalClass { // This would cause a compilation error
// }

六、final 关键字的实际应用

1. 定义常量

使用 final 关键字定义常量,使得这些值在程序运行期间保持不变。

public class Constants {public static final int MAX_VALUE = 100;
}

2. 防止方法被重写

使用 final 关键字防止关键方法被子类重写,从而保证类的行为一致性和安全性。

public class SecurityManager {public final void checkPermission() {// Security check implementation}
}

3. 创建不可变类

通过将类和其所有成员声明为 final,可以创建不可变类。这种类的实例一旦创建,其状态就不能改变。

public final class ImmutableClass {private final int value;public ImmutableClass(int value) {this.value = value;}public int getValue() {return value;}
}

4. 优化性能

编译器和虚拟机可以利用 final 关键字对代码进行优化,因为 final 变量的值是确定的,方法和类不会被修改。

七、final 的一些常见误区

1. final 变量不能在构造方法中赋值

误区:final 变量只能在声明时赋值。 事实:final 变量可以在构造方法中赋值,但只能赋值一次。

public class ExampleClass {final int instanceVar;public ExampleClass(int value) {instanceVar = value;}
}

2. final 类中的所有方法都是 final

误区:在 final 类中的所有方法都是 final 的。

事实:final 类中的方法默认不是 final 的,但由于类本身不能被继承,所以方法也不会被重写。

3. final 变量的引用不能改变

误区:final 变量的引用不能改变。 事实:对于对象引用,final 意味着引用本身不能改变,但对象的内容可以改变。

public class ExampleClass {final List<String> list = new ArrayList<>();public void addElement(String element) {list.add(element); // This is allowed}
}

结论

final 关键字在 Java 中具有重要作用,能够帮助开发者创建更加安全、稳定和高效的代码。理解和正确使用 final 关键字可以避免很多常见错误,并提高代码的可维护性和性能。

 🌟感谢支持 听忆.-CSDN博客

🎈众口难调🎈从心就好

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

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

相关文章

昇思学习打卡-8-计算机视觉/FCN图像语义分割

目录 FCN介绍FCN所用的技术训练数据的可视化模型训练模型推理FCN的优点和不足优点不足 FCN介绍 FCN主要用于图像分割领域&#xff0c;是一种端到端的分割方法&#xff0c;是深度学习应用在图像语义分割的开山之作。通过进行像素级的预测直接得出与原图大小相等的label map。因…

【C++基础】初识C++(2)--引用、const、inline、nullptr

目录 一、引用 1.1 引用的概念和定义 1.2 引用的特性 1.3引用的使用 1.4 const引用 1.5 指针和引用的关系 二、inline 三、nullptr 一、引用 1.1 引用的概念和定义 引⽤不是新定义⼀个变量&#xff0c;⽽是给已存在变量取了⼀个别名&#xff0c;编译器不会为引⽤…

微软的人工智能语音生成器在测试中达到与人类同等水平

微软公司开发了一种新的神经编解码语言模型 Vall-E&#xff0c;在自然度、语音鲁棒性和说话者相似性方面都超越了以前的成果。它是同类产品中第一个在两个流行基准测试中达到人类同等水平的产品&#xff0c;而且显然非常逼真&#xff0c;以至于微软不打算向公众开放。 VALL-E …

【每日一练】python类和对象现实举例详细讲解

""" 本节课程目的&#xff1a; 1.掌握类描述现实世界实物思想 2.掌握类和对象的关系 3.理解什么事面向对象 """ #比如设计一个闹钟&#xff0c;在这里就新建一个类 class Clock:idNone #闹钟的序列号&#xff0c;也就是类的属性priceNone #闹…

【开源之美】:WinMerge Files

一、引言 强大的windows端文件比较工具&#xff0c;跟Beyond Compare相比&#xff0c;更为强大。但是这里我们推荐他的原因&#xff0c;不仅是因为作为一个使用的工具&#xff0c;主要是因为他开源&#xff0c;可以通过调试优秀的源代码&#xff0c;进一步的提升C项目设计和编…

Alternative to Receptive field in Transformers and what factors impact it

题意&#xff1a;Transformer中感受野的替代概念及其影响因素 问题背景&#xff1a; I have two transformer networks. One with 3 heads per attention and 15 layers in total and second one with 5 heads per layer and 30 layers in total. Given an arbitrary set of d…

什么是数据模型?数据模型与数据治理有什么关系?

在企业数据治理的广阔领域中&#xff0c;首要且关键的一步是明确沟通数据治理的需求。这包括对企业所持有的数据种类、数据存储位置、以及当前数据管理的具体情况有一个清晰的了解和记录。了解企业的数据资产是制定有效数据治理策略的基础。企业需要识别和盘点所有类型的数据资…

AIGC产品经理学习路径

基础篇&#xff08;课时 2 &#xff09; AIGC 行业视角 AIGC 的行业发展演进&#xff1a;传统模型/深度学习/大模型 AIGC 的产品设计演进&#xff1a;AI Embedded / AI Copilot / AI Agen AIGC 的行业产业全景图 AIGC 的产品应用全景图 AIGC 职业视角 AI 产品经理/ AIGC…

实验9 存储过程与函数的创建管理实验

一、实验目的&#xff1a; 理解存储过程和函数的概念。掌握创建存储过程和函数的方法。掌握执行存储过程和函数的方法。掌握游标的定义、使用方法。 二、实验内容 1&#xff0e;某超市的食品管理的数据库的Food表&#xff0c;Food表的定义如表所示&#xff0c; Food表的定义…

【进阶篇-Day8:JAVA中递归、异常的介绍】

目录 1、递归的介绍和使用1.1 递归的介绍1.2 案例案例一&#xff1a;案例二&#xff1a;案例三&#xff1a;案例四&#xff1a; 1.3 总结 2、异常的介绍和使用2.1 异常的介绍&#xff1a;&#xff08;1&#xff09;能够看懂异常&#xff08;2&#xff09;异常的体系接口和分类&…

苹果入局,AI手机或将实现“真智能”?

【潮汐商业评论/原创】 “AI应用智能手机不就是现在的AI手机。” 当被问到现阶段对AI手机的看法时&#xff0c;John如是说。“术业有专攻&#xff0c;那么多APP在做AI功能&#xff0c;下载用就是了&#xff0c;也用不着现在换个AI手机啊。” 对于AI手机&#xff0c;或许大多…

Windows安装和使用Doccano标注工具

简介 开源链接&#xff1a;GitHub - doccano/doccano: Open source annotation tool for machine learning practitioners. Open source annotation tool for machine learning practitioners. Doccano是一款开源的文本标注工具&#xff0c;由人工智能公司Hironsan开发并在G…

【算法】代码随想录之数组

文章目录 前言 一、二分查找法&#xff08;LeetCode--704&#xff09; 二、移除元素&#xff08;LeetCode--27&#xff09; 三、有序数组的平方&#xff08;LeetCode--977&#xff09; 四、长度最小的子数组&#xff08;LeetCode--209&#xff09; 五、螺旋矩阵II&#x…

花几千上万学习Java,真没必要!(二)

1、注释&#xff1a; java代码注释分3种&#xff1a; 单行注释&#xff1a;//注释信息 多行注释: /*注释信息*/ 文档注释:/**注释信息*/ public class TestComments {// 这是单行注释&#xff0c;用于注释单行代码或解释代码功能/* 这是多行注释&#xff0c;用于注释多行代码…

Kotlin runCatching try-catch耗时比较

Kotlin runCatching try-catch耗时比较 fun main(args: Array<String>) {val lists arrayListOf("z")val idx 10/***纳秒统计** ns&#xff08;nanosecond&#xff09;&#xff1a;纳秒。一秒的10亿分之一&#xff0c;10的-9次方秒。*   1纳秒0.000001 毫秒…

2024年,搞AI就别卷模型了

你好&#xff0c;我是三桥君 2022年11月30日&#xff0c;OpenAI发布了一款全新的对话式通用人工智能工具——ChatGPT。 该工具发布后&#xff0c;仅用5天时间就吸引了100万活跃用户&#xff0c;而在短短2个月内&#xff0c;其活跃用户数更是飙升至1亿&#xff0c;成为历史上增…

ARP协议介绍与ARP协议的攻击手法

ARP是什么&#xff1f; ARP是通过网络地址&#xff08;IP&#xff09;来定位机器MAC地址的协议&#xff0c;它通过解析网络层地址&#xff08;IP&#xff09;来找寻数据链路层地址&#xff08;MAC&#xff09;的网络传输协议。 对个定义不能理解的话&#xff0c;可以结合 TCP/I…

《恋与深空》2.0上线肉鸽模式,乙游玩家会买账吗?

乙游和肉鸽&#xff0c;看似八竿子打不着的两个赛道&#xff0c;被叠纸给融合起来了。 根据《恋与深空》官方消息&#xff0c;即将在7月15日更新的2.0交错视界版本中&#xff0c;会上线全新常驻玩法“混沌深网”&#xff0c;配置高随机性Roguelike模式&#xff0c;并搭载了管理…

理想文档发布了~一个集合了多个优秀开源项目的在线云文档

两年前我做了一个简单的在线云文档项目&#xff0c;选择了开源的思维导图、白板、流程图、幻灯片等项目&#xff0c;在它们基础上添加了云存储的功能&#xff0c;然后写了一个简单的工作台管理文件夹和文件&#xff1a; 放在了自己的个人网站上使用&#xff0c;同时写了一篇水文…

[web]-代码审计-运维失误

打开页面可以看到如下&#xff1a; 1、查看源代码&#xff0c;发现验证码功能是正常生成的随机的&#xff0c;输入也没有过滤&#xff0c;无法采用爆破。 2、根据题目提示运维失误&#xff0c;使用dirsearch扫描&#xff0c;发现提交的地址check.php, 使用php5、.bak可以打开&…