final关键字到底有什么用?final关键字的作用和用法

在 Java 等编程语言中,final 关键字是一个非常重要的修饰符,它的主要作用是“不可变性”或“最终性”,根据使用场景的不同(修饰变量、方法、类),final 的具体含义和行为有所区别。

以下是 final 关键字在三个主要场景下的详细作用:

【每天一个技术点】final 关键字原来还有这么多用法
加载中
【每天一个技术点】final 关键字原来还有这么多用法

修饰变量(Variable)

当 final 修饰一个变量时,表示该变量一旦被赋值,其值(对于基本数据类型)或引用(对于引用数据类型)就不能再改变。

  • 基本数据类型(如 int, double, boolean):

    • 值不可更改。
    • 必须在声明时或构造函数中初始化,之后不能再赋值。
    • 示例:
      final int MAX_SIZE = 100;
      // MAX_SIZE = 200; // 编译错误:无法为最终变量 MAX_SIZE 分配值
  • 引用数据类型(如 Object, String, 自定义对象):

    • 引用地址不可更改:你不能让该变量指向另一个对象。
    • 可能可变:如果对象本身是可变的(如 ArrayList 或自定义类),你仍然可以修改对象内部的状态(调用其方法),但不能改变变量指向的对象实例。
    • final关键字到底有什么用?final关键字的作用和用法

    • 示例:
      final List<String> list = new ArrayList<>();
      list.add("Hello"); // 允许:修改对象内部状态
      // list = new ArrayList<>(); // 编译错误:无法重新赋值引用
  • 常量约定:

    • final static 修饰的变量被视为常量,命名规范要求全部大写(如 PI、MAX_VALUE)。

修饰方法(Method)

当 final 修饰一个方法时,表示该方法不能被重写(Override)。

  • 目的:

    • 防止子类改变该方法的行为,确保该方法在所有子类中保持一致。
    • 某些情况下,JVM 可以对 final 方法进行内联优化(inlining),提升执行效率(虽然现代 JVM 优化已很强大,这一点的实际意义有所减弱)。
  • 示例:

    class Parent {
        public final void display() {
            System.out.println("Parent method");
        }
    }
    class Child extends Parent {
        // @Override
        // public void display() { ... } // 编译错误:无法重写 Parent 中的 final 方法
    }

    final关键字到底有什么用?final关键字的作用和用法


修饰类(Class)

当 final 修饰一个类时,表示该类不能被继承(Extend)。

  • 目的:

    • 确保类的行为完全一致,防止子类通过继承修改或扩展类的行为。
    • 常用于设计安全关键或不可变的类。
  • 常见例子:

    • java.lang.String
    • java.lang.Math
    • java.lang.Integer 等包装类
  • 示例:

    final class MyFinalClass {
        // 类内容
    }
    // class SubClass extends MyFinalClass {} // 编译错误:无法从最终类 MyFinalClass 进行继承

总结对比表

final关键字到底有什么用?final关键字的作用和用法

修饰对象 含义 主要用途
变量 值/引用不可变 定义常量、防止意外修改、线程安全
方法 不可被重写 锁定行为、防止子类篡改、潜在性能优化
类 不可被继承 设计不可变类、安全控制、API 稳定性

补充说明:final 与线程安全

  • final 变量有助于线程安全,在 Java 内存模型中,final 字段的初始化保证在构造函数结束前完成,并且对其他线程可见,这避免了“发布逸出”(escape)问题。
  • 但注意:final 修饰引用类型时,只保证引用不变,不保证对象内部状态线程安全,如需完全线程安全,需结合 synchronized 或使用并发集合。

最佳实践建议

  1. 优先使用 final:除非你有明确的理由需要修改变量或重写方法,否则默认将变量、方法、类声明为 final,以提高代码的可读性和安全性。
  2. 常量命名规范:使用 public static final 定义常量,并采用全大写下划线命名法(如 MAX_RETRY_COUNT)。
  3. 谨慎使用 final 类:除非你确实希望禁止继承(如 String),否则不要随意将类声明为 final,以免限制扩展性。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://test.idctop.com/article/477466.html

赞 (0)
akamai免费cdn能用吗?akamai cdn免费申请教程
上一篇 2026年7月10日 01:38
poi复制excel报错怎么办?poi读取excel单元格内容
下一篇 2026年7月10日 01:39

相关推荐

  • IDE硬盘接口和SATA接口的区别是什么?,怎么用

    IDE硬盘接口是并行ATA接口的正式名称,曾在个人电脑中统治超过十年,如今虽已退出主流市场,但在老设备维护、工业控制等领域仍有使用价值,IDE硬盘接口定义:从术语到物理规格IDE是Integrated Drive Electronics的缩写,意为集成驱动电子设备,最早由康柏和西部数据在1986年推出,它的核心……

    2026年8月12日
    1800
  • iOS客户端与服务器端源码如何配置,有哪些步骤

    iOS客户端与服务器端的源码协作关系本质上是“端侧负责体验、服务端负责数据”,而配置iOS客户端的核心路径是设置正确的网络请求地址、HTTPS证书信任策略以及ATS权限声明,三者缺一不可,这篇文章从源码结构讲到实操配置,帮你绕过那些容易踩坑的隐形雷区,iOS客户端与服务器端源码的分工逻辑说起iOS客户端与服务器……

    2026年8月19日
    500
  • IIS7 Web服务器的配置文件怎么修改?,证书怎么导入?

    IIS7证书导入的核心在于将包含私钥的PFX证书安装到本地计算机的证书存储,并通过IIS管理器或直接修改applicationHost.config配置文件完成站点绑定,操作简单但需注意权限和存储路径,IIS7配置文件与证书导入的关系在IIS7环境中,证书管理与站点配置紧密关联,配置文件则是这一切的底层支撑,I……

    2026年8月1日
    900
  • AI大模型智能伴侣真的能替代人类吗?AI智能伴侣哪个好用

    AI大模型智能伴侣并非简单的聊天机器人,而是能深度理解意图、提供个性化情感支持与高效任务管理的私人数字助手,其核心价值在于通过拟人化交互显著提升用户的生活效率与心理舒适度,从工具到伙伴:AI大模型智能伴侣的进化逻辑过去我们使用的软件多是“指令型”工具,你需要明确知道每一步操作,而现在的AI大模型智能伴侣更像是你……

    2026年6月13日
    3200
  • 分布式缓存服务优质怎么选?分布式缓存服务有哪些优势

    分布式缓存服务之所以能成为现代架构的基石,核心在于其通过内存读写替代磁盘IO,将系统响应速度提升了数个数量级,同时以高可用集群模式彻底解决了单点故障风险,为什么你的系统需要分布式缓存?在传统的单体应用架构中,数据库往往是整个系统的瓶颈,当并发请求激增时,数据库连接池迅速耗尽,导致查询超时甚至服务宕机,分布式缓存……

    2026年7月7日
    3800
  • Flask怎么修改服务器地址?如何配置Flask运行端口和IP

    Flask修改服务器地址的核心方法是修改app.run()中的host参数,通常设置为’0.0.0.0’以允许外部访问,或指定具体IP绑定特定网卡,在本地开发阶段,Flask默认只监听0.0.1(localhost),这意味着只有当前机器能访问服务,一旦需要将服务暴露给局域网其他设备或公网用户,就必须调整网络绑……

    2026年7月8日
    12510
  • 服务器IP与客户端IP有什么区别,怎么查询本机公网IP地址?

    服务器 IP 地址与客户端 IP 地址详解在网络通信中,IP 地址(Internet Protocol Address) 是设备在网络上的唯一标识符,类似于现实世界中的邮寄地址,根据设备在通信中所扮演的角色,IP 地址被分为服务器 IP 和 客户端 IP,服务器 IP 地址 (Server IP Address……

    2026年7月13日
    3800
  • AI大模型的核心是什么?大模型核心技术有哪些

    AI大模型的核心并非单纯的代码堆砌,而是基于海量数据训练出的“概率预测引擎”,其本质是通过Transformer架构理解上下文逻辑,从而生成具备人类语义连贯性的内容,很多人对人工智能存在误解,以为它像人类大脑一样拥有真正的意识或情感,当你问它“今天天气如何”时,它并没有在“思考”天气,而是在计算下一个字出现的可……

    2026年6月14日
    2500
  • 服务器管理器找不到角色怎么办?如何添加服务器角色

    “服务器管理器中没有角色”通常意味着你打开的服务器管理器实例是空的,或者当前登录的账户/服务器没有安装任何服务器角色(如 IIS、DNS、DHCP 等),请根据你的具体场景,尝试以下解决方案:检查是否添加了本地服务器这是最常见的原因,服务器管理器默认可能只打开一个空窗口,没有关联任何服务器,操作步骤:在服务器管……

    2026年7月11日
    5200
  • 福田网站建设哪家好?2026最新报价与案例解析

    在福田寻找一家靠谱的网站建设公司,核心不在于比较谁的报价最低,而在于确认对方是否具备将业务逻辑转化为高效数字资产的实战能力,以及能否提供售后持续的技术支撑,如今的企业竞争早已从线下延伸到线上,福田作为深圳的核心商务区,聚集了大量金融、物流及高端服务业企业,对于这里的决策者而言,网站不再仅仅是一个展示名片的电子画……

    2026年7月3日
    18700

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

评论列表(1条)

  • 孙晓敏
    孙晓敏 2026年7月11日 16:52

    哎呀,final关键字啊,这玩意儿可真是个好东西!在Java里,它就像是个“保镖”,专门守护着那些不能随便变的东西。