java修饰符是用于控制类、变量、方法访问权限和行为特性的关键字,分为访问修饰符(public、protected、default、private)和非访问修饰符(如static、final、abstract、transient、volatile、synchronized、native、strictfp),直接影响封装性、继承性、线程安全与序列化等机制。

Java中的修饰符(Modifier)用于控制类、变量(属性)、方法的访问权限和行为特性。它们不是独立语法,而是依附于声明语句的关键字,直接影响封装性、继承性、线程安全、序列化等核心机制。
类的修饰符:决定能否被继承和访问范围
类只能使用两类修饰符组合:访问修饰符 + 非访问修饰符。
- public:唯一允许修饰外部类的访问修饰符;该类可被任意包中的类访问;一个源文件中最多一个public类,且文件名必须与之相同。
- default(缺省):不写任何修饰符;仅限同一包内访问;这是外部类默认的访问级别。
- abstract:表示该类不能被实例化,必须由子类继承并实现其抽象方法;可含抽象方法和具体方法;可有构造器(供子类调用)。
- final:禁止被继承;常用于工具类(如String、Math),确保行为不可变。
- strictfp:强制类中所有浮点运算遵循IEEE 754标准,保证跨平台结果一致(较少使用)。
变量(属性)的修饰符:控制可见性与生命周期
变量修饰符分为访问类和行为类,可组合使用(如private static final)。
- public / protected / default / private:决定谁可以读写该字段。注意:private最严格,仅本类可访问;protected允许同包子类跨包访问;default只限同包;public无限制。
-
static:属于类而非实例;所有对象共享同一份内存;可通过类名直接访问(如
User.count)。 -
final:一旦初始化后不可再赋值;配合
static常用于定义常量(如public static final int MAX_SIZE = 100;)。 - transient:标记该字段不参与序列化;反序列化时值为默认值(如int为0,引用为null)。
- volatile:确保多线程环境下对该变量的读写操作直接作用于主内存,避免线程本地缓存导致的可见性问题。
方法的修饰符:影响调用方式与重写规则
方法支持最丰富的修饰符组合,尤其在面向对象设计和并发编程中起关键作用。
- public / protected / default / private:访问控制逻辑与变量一致;private方法不能被子类继承或重写。
-
static:属于类的方法;无需实例即可调用;不能访问非static成员(因无隐式
this)。 -
final:禁止子类重写;常用于防止核心逻辑被篡改(如Object类的
getClass())。 -
abstract:只有声明无实现(方法体为空);必须定义在
abstract类中;子类需用public或protected重写(不能private)。 - synchronized:加对象锁(实例方法)或类锁(静态方法),确保同一时刻只有一个线程执行该方法。
- native:方法实现由非Java语言(如C/C++)提供,通常用于底层系统交互。
接口中的特殊约定
接口本身隐含public abstract,其成员有固定默认修饰符:
- 所有方法默认是
public abstract(即使不写);不能用private、protected、static(Java 8前)或final修饰。 - 所有字段默认是
public static final,即接口中只能定义常量,且必须显式初始化。










