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

final static 中是什么final static联合使用呢

final static 联合使用详解

final 和 static 在 Java 中经常一起使用,主要用来定义类级别的常量。这种组合具有两者的特性:

基本用法

public class Constants {// 典型的 final static 常量定义public static final double PI = 3.141592653589793;public static final int MAX_CONNECTIONS = 100;public static final String APPLICATION_NAME = "MyApp";
}

联合使用的特点

  1. 不可变性 (final)

    • 值一旦初始化后不能被修改

  2. 类级别共享 (static)

    • 所有实例共享同一个变量

    • 可以直接通过类名访问,无需创建实例

  3. 命名惯例

    • 通常使用全大写字母,单词间用下划线分隔

    • 这是 Java 中常量的标准命名方式

初始化时机

  1. 直接初始化

    public static final int TIMEOUT = 30; // 直接初始化
  2. 静态代码块初始化

    public static final String CONFIG_FILE;static {CONFIG_FILE = loadConfigFile(); // 复杂初始化逻辑
    }

内存特性

  • 由于是 static,只在内存中存在一份

  • 由于是 final,JVM 可以进行优化,可能内联这些值

典型应用场景

  1. 数学/物理常量

    public static final double EULER_NUMBER = 2.71828;
  2. 配置参数

    public static final int MAX_LOGIN_ATTEMPTS = 5;
  3. 枚举替代方案 (在Java 5之前)

    public static final int STATUS_ACTIVE = 1;
    public static final int STATUS_INACTIVE = 0;
  4. 单例模式实现

    public class Singleton {private static final Singleton INSTANCE = new Singleton();private Singleton() {}public static Singleton getInstance() {return INSTANCE;}
    }

注意事项

  1. 线程安全final static 变量的初始化是线程安全的

  2. 编译时常量:如果使用基本类型或String直接量初始化,会被编译器视为编译时常量

    public static final int VERSION = 1;  // 编译时常量
    public static final long TIMESTAMP = System.currentTimeMillis(); // 不是编译时常量
  3. 不可变对象:对于引用类型,final 只保证引用不变,对象内容仍可能改变

    public static final List<String> NAMES = new ArrayList<>();
    // 可以执行 NAMES.add("Alice"); 虽然不推荐这样设计

这种组合是Java中定义常量的标准方式,广泛应用于各种框架和库中。

http://www.xdnf.cn/news/179461.html

相关文章:

  • 【算法刷题】
  • MySQL 8.0 忘记登录密码 mysqld --init-file重置
  • AG32 MCU系列三合一芯片,MCU+ 2K cpld + 64Mbit PSRAM,一颗芯片同时满足多种需求。
  • 清华团队提出时序聚类数据库内高效方案,已被SIGMOD 2025接收
  • 【Tools】chezmoi 跨多台不同的机器管理 dotfiles 的工具
  • 缓存并发更新的挑战
  • Python生活手册-元组:保险柜与瑞士军刀
  • 基于javaweb的SpringBoot新闻发布系统设计与实现(源码+文档+部署讲解)
  • 业务中台与数据中台:企业数字化转型的核心引擎
  • 解决qnn htp 后端不支持boolean 数据类型的方法。
  • C语言-- 深入理解指针(4)
  • 学习spark总结
  • 基于SSM的“融资租赁管理系统”的设计与实现(源码+数据库+文档)
  • QT开发技术【QChart添加跟随鼠标的十字线】
  • 信号量函数
  • MySQL快速入门篇---增删改查(下)
  • Neowise Labs Contest 1 (Codeforces Round 1018, Div. 1 + Div. 2)
  • HTML基础完全解析
  • Astah Professional反向建模C++类图
  • 【记录解决问题】--vue select下拉框排除已选择option
  • MCP协议:AI生态的统一标准
  • LeetCode 24 两两交换链表中的节点
  • 半导体行业如何开展风险管理?有没有半导体风控案例参考?
  • 反序列化漏洞2
  • 贪吃蛇游戏demo
  • 计网二。。
  • css响应式布局设置子元素高度和宽度一样
  • Maven项目细节
  • re题(48)BUUCTF-[网鼎杯 2020 青龙组]singal
  • vue项目页面适配