《Java 100 天进阶之路》第14篇:Java final关键字详解

Java中final和static关键字的详解及示例 final。 阅读详情

第14篇:Java final关键字详解

📌 系列导航:《Java 100 天进阶之路》完整目录 |
⬅️ 上一篇:第13篇:JDK和JRE、final与static、堆和栈|
➡️ 下一篇:第15篇:Java控制流程语句

一、核心知识点

  • final修饰类:不能被继承
  • final修饰方法:不能被重写(但可以被重载)
  • final修饰变量:基本类型值不可变,引用类型引用不可变(但对象内部可变)
  • 空白final:声明时不赋值,必须在构造方法中赋值
  • static final:类常量,命名全大写,下划线分隔

二、通俗讲解(1分钟开心学)

1. final修饰类
表示这个类是“最终版”,不允许被继承。比如String类就是final的,所以你不能写class MyString extends String。

为什么String要设计成final?

  • 安全性:防止子类恶意篡改字符串行为。
  • 常量池:final保证了字符串不变性,可以让相同内容的字符串共享对象。
  • 线程安全:不可变对象天然线程安全。

2. final修饰方法
表示这个方法不能被子类重写。常在模板方法模式中使用,把骨架方法声明为final,让子类只能重写某些步骤。

3. final修饰变量

  • 基本类型:值不能改变,名副其实的常量。
  • 引用类型:引用地址不能变,但对象内部属性可以变(除非对象本身是不可变的,如String)。

4. 空白final
声明时不给值,但在所有的构造方法中必须赋值。这提供了一种灵活性:每个对象可以有不同的常量值,但一旦构造完成就不能改变。

5. static final
类常量,通常用大写字母加下划线命名,例如public static final double PI = 3.14;,在类加载时初始化,全局唯一。

三、实操代码案例 + 场景说明

场景:定义一个“人”类,每个人有唯一的身份证号(一旦创建不能修改),且有一个通用的最大年龄常量。

public class Person {
    // 类常量(static final)
    public static final int MAX_AGE = 150;
    
    // 空白final实例变量:每个对象只能赋值一次
    private final String idCard;  // 身份证号
    
    private String name;
    
    public Person(String idCard, String name) {
        this.idCard = idCard;   // 必须在构造方法中赋值
        this.name = name;
    }
    
    // 不允许修改身份证号,所以没有setIdCard()
    public String getIdCard() { return idCard; }
    
    public void setName(String name) { this.name = name; }
    
    // final方法:子类不能重写
    public final void showId() {
        System.out.println("身份证:" + idCard);
    }
}

// final类示例
final class SecurityUtil {
    // 工具类,不希望被继承
    public static void encrypt(String data) { }
}
// class MySecurity extends SecurityUtil {}  // 编译错误,不能继承final类

final引用变量陷阱演示:

final StringBuilder sb = new StringBuilder("Hello");
sb.append(" World");   // 可以,对象内部改变了
System.out.println(sb); // Hello World

// sb = new StringBuilder("New"); // 编译错误,引用不能指向新对象

四、避坑要点

错误/误区后果正确做法
认为final数组或集合内容不可变错误理解,数组元素、集合元素仍可修改需要不可变集合用Collections.unmodifiableList
空白final在某个构造方法中忘记赋值编译错误确保所有构造方法都赋值
final方法被误认为效率一定更高早期优化,现代JVM会自动内联优先关注设计,而非性能
final类中所有方法自动成为final是的,但理解即可不需要额外加final

五、面试高频考点

Q1:final、finally、finalize的区别?

final是关键字,用于限制类、方法、变量;finally是异常处理的最后执行块;finalize是Object的方法,GC前调用(已弃用)。

Q2:String为什么要设计成final?

  1. 安全性(防止继承后篡改);2. 字符串常量池需要不可变性;3. 天然线程安全;4. hashCode可缓存提高性能。

Q3:final int[] arr = {1,2,3}; arr[0]=10; 合法吗?为什么?

合法。arr引用不可变,但数组元素可变。只有数组引用本身不能指向新数组。

六、练习题

  1. 代码填空:写出一个带有空白final变量id的类,要求在构造方法中赋值。
  2. 设计:为什么工具类(如Math)常常用final类 + 私有构造方法?尝试实现一个简单的工具类。
  3. 判断:final Person p = new Person(); p = new Person(); 能否编译通过?

📊 你的学习进度

  • 当前:第10篇 / 共44篇 · 第二阶段:核心语法与面向对象(第5~20篇)
  • ✅ 已完成:第1~9篇
  • 📖 正在学:第10篇
  • ⏳ 待学习:第11~44篇

👉 📚 完整目录 & 学习指南 | 🔥 订阅本专栏,不错过每一篇

💡 本专栏每篇都包含:避坑表 + 面试高频考点 + 练习题。每天30分钟,100天拿offer!


👉 下一篇预告

《Java控制流程语句》

内容简介:if-else、switch-case(含箭头语法)、for/while/do-while循环,break/continue/return跳转。

💡 学完这篇,你将掌握所有流程控制语句,能写出任何逻辑的程序。

📌 《Java 100 天进阶之路 | 从入门到上岗就业》 每天一篇,建议收藏 + 关注,一起100天拿offer!
👉 点击关注我,更新后第一时间收到推送!

Vivado 2018.3 安装步骤及 license 获取 本文的主要内容是介绍 Vivado 2018.3 版本的安装步骤及其 license 的获取与加载。 阅读详情

相关推荐

基于扩展卡尔曼滤波(EKF)结合到达时间(TDOA)、到达频率(FDOA)实现多无人机无源定位,MATLAB代码

该程序实现了一种结合到达时间差(TDOA)和到达频率差(FDOA)技术的多无人机定位方法,利用扩展卡尔曼滤波(EKF)对单一目标进行定位。程序通过模拟多无人机的运动及其与目标的相对位置,估计目标的状态(位置和速度)。

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 1263

java中final关键字

final final是java语言中的一个关键字 final表示最终的,不可变的。 final可以修饰变量以及方法,还有类等。 final修饰的类(无法被继承) final class A{ //A 是没有子孙的 } class B extends A{ //错误的, 无法从最终类A进行继承 //B类继承A类 相当于对A类功能进行扩展 //如果不希望别人对A类进行扩展,可以给A类加final关键字,如String类 } final修饰的方法(无法被覆盖,重

MTCya的博客 3万+

从零搭建芯片设计环境:在Cadence虚拟机中集成QRC进行寄生参数提取

本文详细介绍了在Cadence虚拟机中集成QRC工具进行芯片设计中的寄生参数提取的全流程。从环境准备、QRC安装配置到实际提取操作,提供了完整的步骤指南和常见问题解决方案,帮助工程师高效搭建芯片设计环境并优化提取性能。

weixin_30379531的博客 615

Java基础(十一):关键字final详解

掌握Java中final关键字的核心用法——从不可变的变量、方法到类,深入理解其设计意图与并发安全优势,助你写出更安全、高效的代码!

从基础到源码解析的学习记录 1657

瑞数6.5逆向实战:手把手教你用RPC搞定cookie sign加密(附环境补全技巧)

本文深入解析瑞数6.5逆向实战,重点探讨如何结合环境补全与RPC调用技术来应对其动态加密机制。文章详细介绍了环境指纹采集、双重验证等核心防护原理,并提供了基于Puppeteer的RPC实现方案,手把手教你搞定cookie sign加密,附有实用的环境补全技巧与完整代码示例。

weixin_29315091的博客 1262

ADS1220 STM32硬件SPI驱动程序

前一段时间温故了下标准库,使用的是F1系列芯片,测试程序。

随风飘零翼的博客 5754

Java-final关键字详解

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

边走、边悟、迟早变好 1418

2025小红书跳转卡片实战指南:从零搭建独立后台与自动化发卡系统

本文提供了一份2025年小红书跳转卡片的实战搭建指南,详细解析了独立后台系统的核心架构与自动化发卡流程。文章从零开始,手把手教你使用Node.js、Vue.js等技术栈构建包含后台管理、用户制卡中心与前端交互的完整系统,旨在帮助运营者实现合规引流,并掌握数据自主权与自动化运营能力。

weixin_29234423的博客 499

14、final关键字详解

final关键字在Java中具有多种用途,下面我详细介绍它修饰类、方法、变量(包括静态变量、成员变量和局部变量)的实际意义,以及final变量的宏替换规则。

2402_87701017的博客 1061

倍福TC3 PLC高速采集实战:如何用PLC-Recorder实现0.24ms级时间戳同步

本文详细介绍了倍福TC3 PLC与PLC-Recorder实现0.24ms级时间戳同步的工程实践方案。通过硬件拓扑设计、时间源选择优化、报文结构封装及同步验证方法,为工业自动化领域的高精度数据采集提供了可靠解决方案,特别适用于精密装配、激光切割等微秒级同步要求的场景。

weixin_29193359的博客 367

【YOLOv8改进-注意力机制】LSKNet(Large Selective Kernel Network ):空间选择注意力

【YOLOv8改进-注意力机制】LSKNet(Large Selective Kernel Network ):空间选择注意力 (论文笔记+引入代码)。LSKNet能够动态调整其大的空间接收场,以更好地模拟遥感场景中各种对象的范围上下文。据我们所知,这是首次在遥感目标检测领域探索大型和选择性核机制。

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 2861

java关键字native、static、final详解

native: native关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如C和C++)实现的文件中。Java语言本身不能对操作系统底层进行访问和操作,但是可以通过JNI接口调用其他语言来实现对底层的访问。 JNI是Java本机接口(Java Native Interface),是一个本机编程接口,它是Java软件开发工具箱(Jav

secret 2万+

Python白色飘雪(完整代码)

Python绘制白色飘雪动画的完整代码。

AIGC 3万+

【java】final关键字详解

final:最终的,不可更改的。final修饰类,表示这个类不能被继承,没有子类。提高安全性,提高程序的可读性。final修饰方法,表示这个方法不能被子类重写。final修饰某个变量(成员变量或局部变量),一旦赋值,它的值就不能被修改,即常量,常量名建议使用大写字母。

共同学习,共同成长 1374

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

《Java 100 天进阶之路》第13篇:JDK和JRE、final与static、堆和栈

本文深入解析了JDK/JRE/JVM的包含关系,重点讲解了static和final关键字的用法差异。static用于类级别的变量和方法,实现资源共享;final则保证类不可继承、方法不可重写、变量不可修改。文章通过代码示例演示了静态变量计数和final常量的使用,并对比了堆栈内存的区别:栈存储方法调用和局部变量,堆存储对象实例。最后提供了常见误区避坑指南和面试高频考点,如静态方法限制、final引用可变性等,帮助开发者掌握Java内存模型和关键语法特性。

折哥|智能物流与Java实战,副高数据库工程师。深耕出版社物流WMS/OMS(线体/立库/VGA),也分享Java进阶与OMS电商对接。Oracle→PG实战派。相信沉淀可迁移能力,分享通用技术,不藏不虚。 989

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Java-关键字final详解(public static final)

一、final修饰类 B类继承A类,相当于对A类的功能进行扩展,如果不希望对A类进行扩展,可以给A类加final关键字,这样的话,A类就无法继承了。 源代码中String就是没有子孙的 结论:final修饰的类无法被继承 二、final修饰的方法 所以final修饰的方法无法覆盖和重写。 三、final修饰的变量 (1)局部变量 无法为最终变量进行赋值...

在这个充满危险的乱世之中,只有学会烤鸡才能顽强的活下去。 7189

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【Java第28集】java final关键字详解

修饰对象作用特点典型场景类不能被继承工具类、安全类(如String方法不能被重写核心逻辑保护(如Math类的方法)变量初始化后不可变常量定义、线程安全参数。

学不可以已,活到老,学到老。 1583

Java关键字之final详解

在我们编写Java程序时总会根据需求将变量、方法、类设置成static(静态)或final(最终),熟练掌握final用法是必须的,现在我们就来详细了解final关键字! 一、final概述 概念:由字面可以了解,final有最终态,无法改变的意思。 使用目的:为了阻止改变与提高效率。 高效原因:Java内嵌机制,final方法会在编译的过程中利用内嵌机制进行inline优化。 inli

Leeon的博客 2374

final关键字作用详解

final关键字作用详解目录1 final关键字常用应用场景  1.1 单例模式  1.2 静态配置文件解析后的初始化2 final关键字初始化3 在构造函数中参数用final关键字修饰的作用4 final在集合中的应用  4.1 将集合类对象定义为final  4.2 集合类中的对象设置为final5 final在数组中的应用在java中final关键字有第一无二的特性,就是只可以赋值一次,一旦...

大屎蛋教程网 2428

Java基础——final关键字

​​final关键字总结回顾

shouyeren_st的博客 1250

Java—final关键字总结

Java—final关键字总结 文章目录Java—final关键字总结1.1、final修饰的类无法继承1.2、final修饰局部变量1.3、final修饰引用1.4、final修饰实例变量1.5、常量(static final)1.6、fianl总结 1.1、final修饰的类无法继承 final修饰的类无法继承。 1.2、final修饰局部变量 final修饰的局部变量变量只能赋值一次,一旦赋值,不能重复赋值。 1.3、final修饰引用 final修饰的变量只能赋值一次(万变不离其宗)

Gin_2000的博客 1万+

Java中final关键字详解

在Java中final关键字的作用还有很多,final关 键字能修饰变量、方法和类。 目录final修饰变量final修饰类final修饰方法 final修饰变量 final修饰的变量即成为常量,只能赋值一次,但是final所修饰局部变量和成员变量有所不同。 final修饰的局部变量必须使用之前被赋值一次才能使用。 final修饰的成员变量在声明时没有赋值的叫“空白final变量”。空白fina...

蔡政洁的博客 403

Java中的final关键字详解

三种被final修饰的场景:Java中final关键字的使用很频繁,它可以修饰变量、方法跟类。“final”的英文意思是最终的、不可更改的意思,因此被final修饰的变量、方法或类是不能被更改的。 final一般会跟static关键字结合使用。

解忧杂货铺 792

final关键字详解

/ 使用 public static final 定义全局常量// 枚举也是很好的final常量选择。

牛马baby的博客 897

Java中关键字final详解

在Java编程中,`final`是一个非常重要的关键字,它用于表示某个实体是不可变的。这里的“不可变”可以是变量值、方法或类的结构等。对于初学者来说,理解`final`的用法和它的意义是非常必要的。本文将详细解释Java中`final`关键字的各种用法,并通过示例代码帮助读者更好地掌握。

qq_36720723的博客 699

【java进阶01:final关键字】final修饰的变量只能赋一次值

final修饰的类无法继承。 final修饰的引用一旦指向某个对象,则不能再指向其他对象,但该引用指向的对象内部的数据是可以修改的。​编辑 final修饰的实例变量必须手动初始化,因为系统不会赋默认值,强制手动赋值,否则报错 final修饰的实例变量一般和static联合使用,成为常量。

博客 3452
上一篇: 《Java 100 天进阶之路》第13篇:JDK和JRE、final与static、堆和栈
下一篇: 出版社物流WMS智能调度实战(三):从“卡死”到“跑稳”——WMS机器学习运维监控与自动回滚实战
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值