成员变量修饰符分访问控制类(private、default、protected、public)和行为特性类(static、final、transient、volatile),分别控制可见范围与使用方式,影响封装性、共享性及线程安全性。

成员变量声明时可用的修饰符主要分两类:访问控制类和行为特性类。它们共同决定变量“谁能访问”和“怎么用”,直接影响封装性、共享性与线程安全性。
访问修饰符:控制谁能看到这个变量
这类修饰符决定变量在不同作用域下的可见范围:
- private:仅限本类内部访问,最严格的封装方式,推荐用于大多数实例字段
- default(不写任何修饰符):同包内所有类可访问,跨包不可见
- protected:同包类 + 不同包的子类可访问,常用于父类留给子类扩展的字段
- public:任何类都能访问,慎用,容易破坏封装,一般只用于常量或明确开放的配置项
static:决定变量属于类还是对象
加了 static 的变量是类变量,不是实例变量:
- 所有对象共享同一份内存,修改一处,全部可见
- 无需创建对象即可通过 类名.变量名 直接访问
- 常见用途:计数器(如
public static int instanceCount)、工具类中的常量池、全局配置缓存
final:锁定变量值不变
final 修饰后,变量一旦初始化就不能再赋新值:
- 基本类型:值不可变(如
final double PI = 3.14159;) - 引用类型:引用地址不可变(对象本身仍可修改内部状态)
- 常与 public static 组合,定义公开常量(如
public static final String VERSION = "2.0";)
其他实用修饰符
这些修饰符解决特定场景问题:
- transient:标记该字段不参与序列化,比如临时计算结果、敏感凭证、无法序列化的资源句柄
-
volatile:保证多线程下变量的可见性与禁止指令重排序,适用于标志位(如
volatile boolean running),但不提供原子性

















