【面试专栏|Java核心基础】一文搞定final所有用法:基础场景+并发原理+面试官高频追问
予枫个人主页 个人专栏: 《Java 从入门到起飞》《读研码农的干货日常》《Java 面试刷题指南》 Debug 这个世界Return 更好的自己引言final是Java中最基础却又极易被忽略的关键字看似仅用于“不可修改”实则贯穿类设计、方法封装、变量定义甚至是并发编程的核心场景。它不仅能提升代码可读性、安全性更是面试中的高频考点——从基础用法到并发原理每一个细节都可能成为面试官追问的重点。本文带你吃透final全场景用法附带面试追问解析帮你轻松应对面试写出更健壮的代码文章目录引言一、FINAL关键字核心定义二、FINAL修饰类拒绝继承保证类的完整性2.1 基本用法代码示例2.2 适用场景2.3 面试官追问环节三、FINAL修饰方法禁止重写保留方法逻辑完整性3.1 基本用法代码示例3.2 适用场景3.3 注意事项3.4 面试官追问环节四、FINAL修饰变量不可重新赋值保证变量的稳定性4.1 基本数据类型变量代码示例4.2 引用数据类型变量代码示例4.3 适用场景4.4 面试官追问环节五、FINAL在并发编程中的作用保证线程安全5.1 核心原理极简理解5.2 典型场景不可变对象的线程安全代码示例不可变对象实现5.3 面试官追问环节六、全文总结一、FINAL关键字核心定义final关键字的核心语义是“不可改变”但这种“不可改变”在不同使用场景类、方法、变量中含义有所不同并非简单的“只读”。简单来说final的作用可以概括为3点修饰类类不可被继承修饰方法方法不可被重写修饰变量变量不可被重新赋值看似简单的定义在实际使用中却有很多细节和坑尤其是在并发编程中final的“不可改变”还能帮我们保证线程安全这也是面试中最常被追问的点。 建议点赞收藏慢慢吃透二、FINAL修饰类拒绝继承保证类的完整性2.1 基本用法当一个类被final修饰时意味着这个类无法被其他类继承它的结构和方法将被“固定”无法被修改或扩展。代码示例// final修饰类无法被继承finalclassFinalClass{publicvoidprint(){System.out.println(这是final类的方法);}}// 错误无法继承final类// class SubClass extends FinalClass {} // 编译报错2.2 适用场景工具类比如Java中的String、Integer、Math类都是final类。工具类的方法通常是静态方法无需继承扩展且需要保证方法逻辑的稳定性避免被篡改。安全类如果某个类的逻辑是固定的且不希望被外部继承修改防止恶意重写破坏类的核心功能可使用final修饰。不可变类final类是实现不可变类的必要条件之一比如String结合final变量可保证对象创建后状态不可改变。2.3 面试官追问环节追问1为什么Java中的String要设计成final类答核心是为了安全性和性能。① 安全性避免String被继承后重写方法篡改字符串内容比如重写equals、hashCode方法导致线程安全问题或逻辑异常② 性能String是高频使用的类final修饰可让JVM进行优化比如字符串常量池提升访问效率③ 不可变性保证String对象创建后状态不变可安全地在多线程中共享。追问2final类中的方法是否一定是final的答不一定。final类的核心是“不可继承”而方法是否final是“不可重写”的含义。final类中的方法默认不需要加final因为无法继承自然无法重写但手动添加final也不会报错只是多余的操作不推荐。三、FINAL修饰方法禁止重写保留方法逻辑完整性3.1 基本用法当一个方法被final修饰时意味着这个方法无法被子类重写子类可以继承该方法但不能修改其实现逻辑。代码示例classParentClass{// final修饰方法无法被重写publicfinalvoidfinalMethod(){System.out.println(这是父类的final方法);}publicvoidnormalMethod(){System.out.println(这是父类的普通方法);}}classSubClassextendsParentClass{// 错误无法重写final方法// Override// public void finalMethod() {} // 编译报错// 正确可以重写普通方法OverridepublicvoidnormalMethod(){System.out.println(子类重写父类的普通方法);}}3.2 适用场景核心业务方法如果某个方法的逻辑是核心逻辑不允许子类修改比如支付逻辑、权限校验逻辑可使用final修饰避免子类重写导致业务异常。性能优化final方法在编译时会被JVM优化比如内联优化减少方法调用的开销提升代码执行效率尤其适用于高频调用的方法。防止方法被恶意重写避免子类通过重写方法破坏父类的核心逻辑提升代码的安全性。3.3 注意事项final方法可以被重载重载和重写是不同的概念final只禁止重写不禁止重载。构造方法不能被final修饰构造方法是用于初始化对象的无法被重写因此final修饰构造方法没有意义编译器会直接报错。3.4 面试官追问环节追问1final方法和static方法的区别是什么都不能被重写吗答两者核心区别在于继承和调用方式① 调用方式static方法通过类名调用不依赖对象final方法通过对象调用依赖对象② 继承特性static方法可以被继承但不能被重写子类重写static方法实际是定义了一个新的static方法并非重写final方法可以被继承但不能被重写③ 作用static方法用于工具类逻辑final方法用于保证方法逻辑不被篡改。追问2private方法和final方法都不能被重写两者有什么区别答① 访问权限private方法是私有方法子类无法访问自然无法重写final方法是公开/保护的方法子类可以访问但不能重写② 继承性private方法不会被子类继承final方法会被子类继承③ 本质private是访问权限修饰符final是功能修饰符两者禁止重写的原理不同。四、FINAL修饰变量不可重新赋值保证变量的稳定性final修饰变量是最常用的场景也是细节最多的场景根据变量类型基本数据类型、引用数据类型“不可改变”的含义也不同。4.1 基本数据类型变量final修饰基本数据类型变量时变量的值不可被重新赋值一旦初始化值就固定不变。代码示例publicclassFinalVariableDemo{// 1. 成员变量final修饰必须初始化构造器初始化或直接赋值privatefinalintnum110;privatefinalintnum2;// 构造器初始化final成员变量publicFinalVariableDemo(){num220;}publicvoidtest(){// 错误final基本数据类型变量无法重新赋值// num1 30; // 编译报错// num2 40; // 编译报错// 2. 局部变量final修饰可延迟初始化但初始化后不可赋值finalintnum3;num330;// num3 40; // 编译报错}}4.2 引用数据类型变量final修饰引用数据类型变量时变量的引用地址不可改变但引用对象的内容可以改变。这是最容易踩坑的点很多开发者误以为final修饰引用变量对象内容也不能改变其实不然代码示例publicclassFinalReferenceDemo{// final修饰引用变量引用地址不可变privatefinalListStringlistnewArrayList();publicvoidtest(){// 正确引用对象的内容可以修改list.add(final用法);list.add(并发编程);System.out.println(list);// 输出[final用法, 并发编程]// 错误引用地址不可改变无法重新赋值// list new ArrayList(); // 编译报错}}4.3 适用场景常量定义结合static和final定义全局常量比如public static final String URL https://xxx.com保证常量的值不被篡改提升代码可读性。方法参数final修饰方法参数防止方法内部修改参数的值基本类型或引用地址引用类型避免参数被意外修改提升代码安全性。局部变量当变量的值不需要被修改时用final修饰明确变量的不可变性提升代码可读性和可维护性。4.4 面试官追问环节追问1final、static final、final static的区别是什么答核心区别在于作用域和初始化时机① final修饰变量时变量不可重新赋值成员变量需在构造器或直接初始化局部变量可延迟初始化② static final修饰全局常量属于类级别的变量不依赖对象初始化时机是类加载时且必须直接赋值不能在构造器中初始化③ final static和static final完全等价只是书写顺序不同推荐使用static final规范写法。追问2final修饰局部变量为什么可以不用立即初始化答因为局部变量的生命周期是在方法执行期间编译器会检查局部变量的使用逻辑——只要在使用final变量之前完成初始化就不会报错。而成员变量的生命周期是和对象绑定的若不初始化对象创建时变量会有默认值违背final“不可改变”的语义因此必须在构造器或直接初始化。五、FINAL在并发编程中的作用保证线程安全final在并发编程中的核心作用是保证可见性和禁止指令重排序这是Java内存模型JMM中的重要特性也是面试中高频考点。5.1 核心原理极简理解JMM规定final变量在初始化完成后会被“写屏障”保护确保其初始化结果能被所有线程可见且不会被指令重排序避免线程看到未初始化完成的对象。简单来说final可以让变量的初始化“不可打断”保证多线程环境下线程看到的final变量一定是初始化完成的从而避免并发安全问题。5.2 典型场景不可变对象的线程安全final是实现不可变对象的核心比如String、Integer而不可变对象天生是线程安全的——因为对象创建后状态不可改变无需加锁就能在多线程中安全共享。代码示例不可变对象实现// 不可变类类用final修饰成员变量用final修饰无setter方法finalclassImmutableObject{privatefinalStringname;privatefinalintage;// 构造器初始化所有成员变量publicImmutableObject(Stringname,intage){this.namename;this.ageage;}// 只提供getter方法无setter方法publicStringgetName(){returnname;}publicintgetAge(){returnage;}}上述不可变类由于类和成员变量都用final修饰对象创建后name和age的值无法修改因此在多线程中共享时不会出现线程安全问题。5.3 面试官追问环节追问1final如何禁止指令重排序在对象初始化中如何体现答JMM对final变量设置了“写屏障”当final变量初始化完成后会插入一道写屏障禁止编译器和CPU将final变量的初始化指令重排序到构造器之外。比如创建一个对象时若成员变量是final的会保证final变量初始化完成后对象引用才会被赋值避免线程拿到“半初始化”的对象比如对象引用已赋值但final变量还未初始化。追问2volatile和final都能保证可见性两者有什么区别答① 核心作用volatile主要保证可见性和禁止指令重排序不保证原子性final主要保证不可变性、可见性和禁止指令重排序不涉及原子性② 可变性volatile修饰的变量可以被重新赋值final修饰的变量不能被重新赋值③ 适用场景volatile用于多线程间共享变量的状态同步比如标志位final用于保证变量不可改变实现不可变对象提升并发安全性。六、全文总结final关键字虽然简单但覆盖场景广泛核心是“不可改变”具体表现为修饰类不可继承保证类的完整性如String修饰方法不可重写保证方法逻辑不被篡改提升性能修饰变量基本类型不可改值引用类型不可改地址保证变量稳定性并发场景保证可见性、禁止指令重排序助力实现线程安全的不可变对象。掌握final的全场景用法不仅能写出更健壮、安全的代码更能轻松应对面试中的高频追问。建议结合实际项目场景多练习避开使用坑

相关新闻

我怀疑我的论文泄露了!自查AI率很低,编辑查AI率很高是怎么回事?

我怀疑我的论文泄露了!自查AI率很低,编辑查AI率很高是怎么回事?

现在发表SCI论文基本都要求查论文AI率了。但是大家都知道,投稿SCI论文是一个周期很长的过程,在这期间也会多次检测论文AI率。 有同学遇到了这样的问题:投稿之前自己检测论文AI率是低于20%的,但是投稿后编辑邮件说AI率太高&#x…

2026/7/6 21:37:24 阅读更多 →
nodejs+php+vue医疗企业固定资产管理系统的设计与实现

nodejs+php+vue医疗企业固定资产管理系统的设计与实现

目录 技术栈选择与分工系统架构设计功能模块划分开发环境搭建核心业务实现测试与部署方案安全防护措施性能优化策略 项目技术支持可定制开发之功能亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作 技术栈选择与分工 Node.js 负责后端 A…

2026/5/17 7:24:54 阅读更多 →
YOLO26提升方面

YOLO26提升方面

YOLO26 相比之前的版本(特别是 YOLOv6-3.0)带来了可以说是“脱胎换骨”的提升,核心变化在于采用了端到端的无NMS(非极大值抑制)设计,并对训练和部署的易用性进行了全面优化。下面为你详细拆解它的主要提升点…

2026/7/6 18:16:14 阅读更多 →

最新新闻

远程协助软件推荐 远程协助软件哪个好

远程协助软件推荐 远程协助软件哪个好

日常帮亲友排查设备故障、异地处理工作难题,都需要靠谱的远程协助,便捷高效的远程协助能大幅降低跨设备、跨地域的操作成本。哪款远程协助软件体验比较呢?无界趣连2.0凭借轻量化设计与扎实的使用体验,成为个人日常远程协助的优选工…

2026/7/7 4:55:49 阅读更多 →
AD15 敷铜(Polygon Pour) 的完整操作,按步骤做即可,适合顶层/底层GND或电源敷铜。

AD15 敷铜(Polygon Pour) 的完整操作,按步骤做即可,适合顶层/底层GND或电源敷铜。

一、准备工作- 确保 板框(Board Shape) 已画好(机械层 Mechanical 1)。​- 布局、走线基本完成,DRC 先过一遍。​- 切换到要敷铜的层:底部层标签点 Top Layer(顶层) 或 Bottom Layer…

2026/7/7 4:55:49 阅读更多 →
NET 10:Oxigraph 的 FFI 桥接实践

NET 10:Oxigraph 的 FFI 桥接实践

架构概览┌──────────────────────────────────────────────────────────┐ │ .NET 应用层 │ │ ┌──────────┐ ┌────────────────…

2026/7/7 4:55:49 阅读更多 →
从静态限流到智能负载管理:Uber 如何治理大规模数据库过载

从静态限流到智能负载管理:Uber 如何治理大规模数据库过载

本文是对 How Uber Conquered Database Overload: The Journey from Static Rate-Limiting to Intelligent Load Management 的整理与翻译。 内容结构概览 本文会围绕 Uber 如何从静态限流走向智能负载管理展开,主要包括: 为什么 Uber 的数据库过载治理…

2026/7/7 4:47:48 阅读更多 →
Uber 如何用原生 gRPC 加速 OpenSearch:从 REST/JSON 瓶颈到搜索与写入性能优化

Uber 如何用原生 gRPC 加速 OpenSearch:从 REST/JSON 瓶颈到搜索与写入性能优化

本文是对 Accelerating Search and Inestion with High-Performance gRPC™ in OpenSearch™ 的整理与翻译。 内容结构概览 本文会围绕 Uber 如何在 OpenSearch 中引入原生 gRPC 传输层展开,主要包括: 为什么搜索系统在 Uber 几乎无处不在REST/JSON 在…

2026/7/7 4:47:48 阅读更多 →
CRM管理系统有哪些?2026年高性价比选型指南

CRM管理系统有哪些?2026年高性价比选型指南

很多企业在挑选 CRM 时,习惯先看每家的报价单,比完单价比折扣,最后选一个 "看起来最便宜" 的方案。但我们接触过的大量真实案例显示:约 60% 的企业在 CRM 上线后的第三年,实际支出会超出最初预算的 40% 以上…

2026/7/7 4:45:48 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队,往往容易卡在一容易踩坑的选型难题: 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定,必须同时依赖「文本语义理解 实体关系推理」时,到底是做「向量图谱混合检索」就够了,还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻