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

final 关键字在不同上下文中的用法及其名称

1. final 变量

  • 名称final 变量(常量)。

  • 作用:一旦赋值后,值不能被修改。

  • 分类

    • final 实例变量:必须在声明时或构造函数中初始化。

    • final 静态变量:必须在声明时或静态代码块中初始化。

示例:
class Example {final int instanceVar = 10; // final 实例变量final static int staticVar; // final 静态变量static {staticVar = 20; // 在静态代码块中初始化}Example(int value) {// instanceVar = value; // 错误:final 实例变量已经初始化}
}

2. final 方法

  • 名称final 方法。

  • 作用:不能被子类重写(Override)。

示例:
class Parent {final void display() {System.out.println("This is a final method.");}
}class Child extends Parent {// void display() { // 错误:不能重写 final 方法//     System.out.println("Trying to override final method.");// }
}

3. final 类

  • 名称final 类。

  • 作用:不能被继承。

final class FinalClass {void display() {System.out.println("This is a final class.");}
}// class SubClass extends FinalClass { // 错误:不能继承 final 类
// }

4. final 参数

  • 名称final 参数。

  • 作用:在方法内部不能修改参数的值。

示例:
void printMessage(final String message) {// message = "New Message"; // 错误:不能修改 final 参数System.out.println(message);
}
 

5. final 与匿名内部类

  • 名称final 局部变量(用于匿名内部类)。

  • 作用:在匿名内部类中使用的局部变量必须是 final 或等效于 final(即不可变)。

示例:
void printMessage() {final String message = "Hello"; // final 局部变量Runnable r = new Runnable() {public void run() {System.out.println(message); // 在匿名内部类中使用}};new Thread(r).start();
}


6. final 与多线程

  • 名称final 字段(用于多线程安全)。

  • 作用final 字段在构造函数完成后是线程安全的,其他线程可以看到正确的初始化值。

示例:
class SafePublication {final int value;SafePublication(int value) {this.value = value; // 构造函数中初始化 final 字段}void printValue() {System.out.println(value);}

7. final 与不可变对象

  • 名称:不可变对象(Immutable Object)。

  • 作用:通过将类的字段声明为 final,可以创建不可变对象。

示例:
final class ImmutablePoint {private final int x;private final int y;public ImmutablePoint(int x, int y) {this.x = x;this.y = y;}public int getX() {return x;}public int getY() {return y;}
}

8. final 与静态常量

  • 名称:静态常量。

  • 作用:通过 static final 定义全局常量。

示例:
class Constants {public static final double PI = 3.14159; // 静态常量public static final String APP_NAME = "MyApp";
}

总结

类型名称作用示例
final 变量final 变量(常量)值不可变final int x = 10;
final 方法final 方法不能被子类重写final void display() { ... }
final 类final 类不能被继承final class FinalClass { ... }
final 参数final 参数方法内部不能修改参数值void print(final String message) { ... }
final 局部变量final 局部变量匿名内部类中使用的局部变量必须是 finalfinal String msg = "Hello";
final 字段final 字段多线程安全,构造函数完成后不可变final int value;
不可变对象不可变对象通过 final 字段实现不可变性final class ImmutablePoint { ... }
静态常量静态常量通过 static final 定义全局常量public static final double PI = 3.14159;

通过合理使用 final 关键字,可以提高代码的安全性、可读性和性能。

http://www.lryc.cn/news/544259.html

相关文章:

  • Elasticsearch:使用阿里云 AI 服务进行嵌入和重新排名
  • 【愚公系列】《鸿蒙原生应用开发从零基础到多实战》004-TypeScript 中的泛型
  • IP属地是通过卫星定位的吗?如何保护用户隐私
  • 【云原生之kubernetes实战】在k8s环境中高效部署Vikunja任务管理工具(含数据库配置)
  • php序列化与反序列化
  • 视频级虚拟试衣技术在淘宝的产品化实践
  • 音视频-WAV格式
  • c++ std::array使用笔记
  • 第39天:安全开发-JavaEE应用SpringBoot框架Actuator监控泄漏Swagger自动化
  • 浏览器JS打不上断点,一点就跳到其他文件里。浏览器控制台 js打断点,指定的位置打不上断点,一打就跳到其他地方了。
  • conda环境管理 kernel注册到jupyter notebook
  • 【SpringBoot】【log】 自定义logback日志配置
  • 15.7 LangChain 版智能销售顾问实战:构建企业级知识驱动型对话系统
  • 计算机网络基础:揭开网络世界的神秘面纱
  • 工会考试知识点分享
  • az devops login报错:Failed to authenticate using the supplied token.
  • Halcon图像预处理算子 sobel算子、傅里叶变换算子、卷积算子
  • Java Web应用中获取客户端的真实IP地址
  • 洛谷————P11559 【MX-X7-T0】[LSOT-3] 嗯欧哎
  • 2020年SCI1区TOP:异质综合学习和动态多群体粒子群算法HCLDMS-PSO,深度解析+性能实测
  • FinRobot:一个使用大型语言模型进行金融分析的开源AI代理平台
  • 【windows driver】 开发环境简明安装教程
  • 强制完整性级别(MIL)和用户账户控制(UAC)的联系与区别
  • 性能附录:如何计算并发用户数(摘自高楼老师《性能30讲》)
  • 视频推拉流EasyDSS点播平台云端录像播放异常问题的排查与解决
  • 【Python系列】Python 连接 PostgreSQL 数据库并查询数据
  • 辛格迪客户案例 | 甫康(上海)健康科技有限责任公司药物警戒管理系统(PVS)项目
  • 重新审视 ChatGPT 和 Elasticsearch:第 2 部分 - UI 保持不变
  • 坐标变换及视图变换和透视变换(相机透视模型)
  • 基于反激电路的电池充放电均衡控制