讲师中心 微信公众号
AI工具推荐 视频效率加速

final关键字的三种用法_修饰类、方法与变量的最终态

落宇小哥_9032

落宇小哥_9032

发布时间:2026-02-21 15:49:03

|

733人浏览过

|

来源于php中文网

原创

final修饰类禁止继承,但抽象类不可用final;修饰方法禁止重写但允许重载;修饰变量仅保证引用不变,对象状态仍可变;仅static final基本类型或字符串且编译期确定才内联。

final关键字的三种用法_修饰类、方法与变量的最终态

final 修饰类:禁止继承,但要注意抽象类不能被 final 修饰

当你把一个类声明为 final,JVM 就不允许任何类去继承它。这常用于工具类(比如 java.lang.String)或安全敏感的类,防止子类篡改行为。

  • 常见错误:给 abstract 类加 final —— 编译直接报错 Illegal combination of modifiers: 'abstract' and 'final',因为抽象类本意就是被继承的
  • 使用场景:写完一个稳定、无扩展需求的工具类(如 StringUtils),又担心别人误继承导致逻辑混乱,就加 final
  • 性能影响几乎为零,纯编译期约束;但会降低框架集成灵活性(比如 Spring AOP 的 CGLIB 代理就无法对 final 类生效)

final 修饰方法:锁定实现,但不影响重载

final 方法不能被子类重写,但可以被重载(overload)。它和 @Override 是反向关系:一个说“你别动我”,一个说“我正覆盖你”。

  • 常见错误:以为 final 方法能阻止反射调用 —— 实际上 AccessibleObject.setAccessible(true) 依然能绕过访问控制(除非启用了安全管理器)
  • 使用场景:父类中定义了关键流程骨架(比如模板方法模式里的钩子方法),但某个步骤逻辑绝对不可变,就用 final 锁住
  • 注意:private 方法隐式是 final 的,再加 final 关键字虽不报错,但属于冗余,IDE 通常会警告

final 修饰变量:只赋值一次,但“不变”仅限引用地址

final 变量必须在声明时、构造器中或初始化块里完成赋值,之后不能再指向新对象。但它指向的对象内部状态仍可变 —— 这点最容易误解。

  • 常见错误:写 final List<string> list = new ArrayList(); list.add("a");</string> 后以为“list 不可变”,其实只是不能 list = new ArrayList();,但 add/clear 都合法
  • 使用场景:配置项、常量、依赖注入后的不可变引用(比如 Spring 中 @Autowired private final Service service;)
  • 参数差异:final 形参只是告诉调用方“我在方法内不会重新赋值这个参数变量”,不影响实参本身,也不影响传入对象的状态
  • 如果真要不可变容器,请用 Collections.unmodifiableList() 或 ImmutableList.of(),而不是只靠 final

final 和编译期常量:只有 static final 基本类型/字符串才可能内联

只有同时满足 static + final + 基本类型或 String + 编译期可确定值,才会被编译器当作“编译期常量”,在调用处直接替换为字面量。

  • 常见错误:写 static final int TIMEOUT = System.currentTimeMillis() > 0 ? 5000 : 3000; —— 因为不是编译期常量,不会内联,且每次运行值可能不同
  • 影响:如果 A 类引用了 B 类的编译期常量,B 类修改该值后只重新编译 B,A 类不重新编译就会沿用旧值(因为 A 里已被替换成字面量)
  • 安全做法:不确定是否编译期可算出的值,统一用 static final + 显式初始化块或私有静态方法封装,避免意外内联

最常被忽略的是 final 对象内容可变这件事——很多人以为加了 final 就万事大吉,结果在多线程里共享了一个 final List,还往里 add 元素,既没同步也没用不可变容器,问题就藏得特别深。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
spring框架介绍
spring框架介绍

本专题整合了spring框架相关内容,想了解更多详细内容,请阅读专题下面的文章。

2771

2025.08.06

Java Spring Security 与认证授权
Java Spring Security 与认证授权

本专题系统讲解 Java Spring Security 框架在认证与授权中的应用,涵盖用户身份验证、权限控制、JWT与OAuth2实现、跨站请求伪造(CSRF)防护、会话管理与安全漏洞防范。通过实际项目案例,帮助学习者掌握如何 使用 Spring Security 实现高安全性认证与授权机制,提升 Web 应用的安全性与用户数据保护。

497

2026.01.26

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

6939

2023.08.02

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6224

2023.10.24

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1838

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2924

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6224

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

6109

2023.11.24

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

100

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn