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

Java 中 final 与 static 的区别

Java 中 finalstatic 的区别

在 Java 中,finalstatic 是两个不同的关键字,它们的核心作用和不可变性特性有本质区别:

一、final 的核心作用

1. 变量(不可变引用)

  • 不可重新赋值final 修饰的变量一旦初始化后,引用地址不可变(基本类型值不可变,对象类型引用不可变)。
  • 对象内容可能可变:若 final 修饰对象引用,对象内部状态可能仍可修改(例如 final List 可以 add 元素,但不能重新指向新列表)。
final int x = 10;
x = 20; // 编译错误!final List<String> list = new ArrayList<>();
list.add("Hello"); // 允许操作对象内容
list = new ArrayList<>(); // 编译错误!引用不可变

2. 方法(不可重写)

  • final 方法不能被子类重写,但可以重载。

3. 类(不可继承)

  • final 类不能被继承(如 String 类)。

二、static 的核心作用

1. 类级别成员

  • static 修饰的变量、方法、代码块属于类,而非实例。
  • 所有实例共享:修改 static 变量会影响所有实例。
class Counter {static int count = 0; // 所有实例共享Counter() { count++; }
}

2. 无不可变性保证

  • static 变量默认可变,需配合 final 实现常量。
class Config {static int timeout = 100;       // 可被修改static final int MAX_SIZE = 1024; // 类常量
}

三、关键区别

特性finalstatic
作用目标变量、方法、类变量、方法、代码块、嵌套类
不可变性确保引用/值不可变(对象内容可能可变)无直接关联,变量默认可变
内存归属实例变量或常量类级别变量/方法
典型场景常量、不可变逻辑、防止继承/重写共享资源、工具方法

四、组合使用:static final 常量

staticfinal 结合时,定义类级别的不可变常量:

public class MathUtils {public static final double PI = 3.14159; // 类常量,不可变且全局访问
}

五、总结

  • final:确保变量引用/值不可变(对象内容可能可变),或限制方法/类的扩展性。
  • static:定义类级别成员,与不可变性无关,需结合 final 实现常量。
  • 不可变性 需通过设计实现(如 final + 不可变对象),而非单纯依赖关键字。
http://www.xdnf.cn/news/7700.html

相关文章:

  • 关于element-ui的table type=“expand“ 嵌套表格展开异常问题解决方案
  • 【C# 自动化测试】Selenium显式等待机制详解
  • Docker网络全景解析:Overlay与Macvlan深度实践,直通Service Mesh集成核心
  • 三轴云台之高精度稳定技术篇
  • 什么是 ERP、MES、PLM,生产制造中如何应用
  • 【C++算法】70.队列+宽搜_N 叉树的层序遍历
  • 软件架构之-论分布式架构设计及其实现
  • Day122 | 灵神 | 二叉树 | 二叉树的层序遍历 二叉树的锯齿状遍历
  • FactoryBean是什么,Spring如何实现FactoryBean的?
  • mac上将 Excel 文件的扩展名从 .xls 改为 .xlsx 后,打开时报错:“文件格式或文件扩展名无效”。
  • C++初阶-vector的模拟实现1
  • 利用 SQL Server 作业实现异步任务处理:一种简化系统架构的实践方案
  • 自然语言处理
  • 基于R语言地理加权回归、主成份分析、判别分析等空间异质性数据分析技术
  • 足式机器人经典控制常用的ROS库介绍
  • 如何使用AI辅助开发R语言
  • 星闪开发之buttondemo烧录后无效果思路
  • 基于双通道频谱分析的振动信号故障诊断2
  • vite ts vue中增加路由
  • 【HarmonyOS 5】金融应用开发鸿蒙组件实践
  • 基于PyTorch的医学影像辅助诊断系统开发教程
  • unity XCharts插件生成曲线图在UICanvas中
  • python训练 60天挑战-day31
  • 查看mysql配置文件my.cnf的位置
  • Docker-Harbor 私有镜像仓库使用指南
  • MyBatis 动态 SQL 标签详解教程:_set_、_trim_、_sql_、_choose_、_when_
  • 抢占短剧商业蓝海!AI 驱动 CPS 系统开发定制赋能高效变现
  • 数据结构*排序
  • tigase源码学习笔记-事件总线EventBus
  • 跨境外贸电商供应链一体化ERP管理系统