当前位置: 首页 > news >正文

Java 中的 final 关键字有哪些用法?

Java 中的 final 关键字有哪些用法?

总结性回答

Java 中的 final 关键字主要有三种用法:

  1. 修饰变量:表示该变量一旦初始化后就不能被修改
  2. 修饰方法:表示该方法不能被子类重写(override)
  3. 修饰类:表示该类不能被继承

详细解释

1. final 修饰变量

final 修饰变量时,表示该变量是一个常量,一旦被赋值后就不能再改变。根据变量的类型不同,有以下几种情况:

  • 基本类型变量:值不能被修改

    final int MAX_VALUE = 100;
    // MAX_VALUE = 200; // 编译错误,不能修改final变量
    
  • 引用类型变量:引用不能改变,但对象内部状态可以改变

    final List<String> list = new ArrayList<>();
    list.add("Hello"); // 允许
    // list = new ArrayList<>(); // 编译错误,不能修改引用
    
  • 方法参数:参数在方法内不能被重新赋值

    void process(final int param) {// param = 10; // 编译错误
    }
    

2. final 修饰方法

final 方法不能被子类重写,主要用于防止子类修改方法的行为:

class Parent {public final void show() {System.out.println("Parent show");}
}class Child extends Parent {// @Override// public void show() { // 编译错误,不能重写final方法//     System.out.println("Child show");// }
}

3. final 修饰类

final 类不能被继承,常用于设计不可变的类或出于安全考虑:

final class ImmutableClass {private final int value;public ImmutableClass(int value) {this.value = value;}public int getValue() {return value;}
}// class SubClass extends ImmutableClass { // 编译错误,不能继承final类
// }

Java 中很多基础类都是 final 的,比如 StringInteger 等包装类。

其他注意事项

  1. final 变量必须在声明时或在构造函数中初始化
  2. static final 组合用于定义类常量
  3. final 可以提高性能,JVM 会对 final 变量进行优化
  4. final 有助于实现线程安全,因为不可变对象天生是线程安全的
http://www.dtcms.com/a/313454.html

相关文章:

  • C++ 虚函数相关问题 **
  • 基于云模型的模糊综合风险评估Matlab代码
  • 网关与路由器的区别
  • access系统调用及示例
  • 延迟任务方案-DelayQueue
  • SpringBoot 2.x 升 3.x 避坑指南:企业级项目的实战问题与解决方案
  • Celery-分布式任务队列
  • MySQL深度理解-MySQL锁机制
  • 数据结构学习(day01)
  • 第八章:进入Redis的SET的核心
  • Android系统模块编译调试与Ninja使用指南
  • 【数据分享】各省粮食外贸依存度、粮食波动率等粮食相关数据合集(2011-2022)(获取方式看文末)
  • 【MATLAB】(六)多项式的创建与四则运算
  • python的高校奖助学金系统
  • 23 Active Directory攻击与防护策略解析
  • 编译旧版本的electron内核
  • SpringBoot之整合MyBatisPlus
  • Nvidia Orin DK 刷机CUDA TensorRT+硬盘扩容+ROS+Realsense+OpenCV+Ollama+Yolo11 一站式解决方案
  • 从“配置地狱”到“云端乐园”——Nacos 如何成为分布式微服务配置中心的“定海神针”
  • 数组和指针的关系
  • 操作系统——读者写者问题
  • KNX协议介绍
  • Nvidia Orin + RealSense D435i 与3D地图实现导航
  • Ubuntu系统VScode实现opencv(c++)视频的处理与保存
  • [硬件电路-129]:模拟电路 - 继电器的工作原理、关键指标、常用芯片与管脚定义
  • SpringAI的使用
  • Socket编程——TCP协议
  • 从一到无穷大 #51:突破阿姆达尔定律:COZ因果剖析与串行优化八法
  • Java学习第一百零一部分——网关(Gateway)
  • java测试题(ssm框架)