Java 修饰关键字的总结

一、访问控制修饰符

修饰符 适用对象 作用范围 说明
public 类、方法、变量 全局可见 所有包中的类均可访问
protected 方法、变量 同包或子类可见 不同包的子类通过继承访问
默认 类、方法、变量 同包可见(无修饰符) 不写任何修饰符时的默认行为
private 方法、变量 仅当前类可见 用于封装数据,隐藏实现细节

二、非访问修饰符

修饰符 适用对象 作用说明 关键特性
static 变量、方法、代码块、内部类 类级别共享 通过类名直接访问,不依赖实例
final 类、方法、变量 不可变/不可继承 常量、不可重写的方法、不可继承的类(如 String
abstract 类、方法 定义抽象结构 抽象类不能实例化,抽象方法需子类实现
synchronized 方法、代码块 线程同步 防止多线程并发访问导致数据不一致
volatile 变量 保证多线程可见性 避免指令重排序,直接读写主内存
transient 变量 序列化时忽略该变量 敏感数据(如密码)不持久化
native 方法 本地方法(由 JVM 外代码实现) 通常用于调用 C/C++ 库
strictfp 类、方法 确保浮点运算平台一致性 严格遵循 IEEE 754 标准

三、Java 17+ 新增修饰符

修饰符 适用对象 作用说明 关键特性
sealed 类、接口 限制类的继承/实现 通过 permits 指定允许的子类
non-sealed 类、接口 解除 sealed 类的限制 允许任意继承
permits 类、接口 指定允许继承的子类(与 sealed 配合使用) 需在父类中声明

四、特殊场景修饰符

修饰符 适用对象 作用说明 示例或说明
default 接口方法 接口的默认方法实现(Java 8+) 解决接口扩展问题,子类可选择重写
var 局部变量 类型推断(Java 10+) var list = new ArrayList<String>();

五、修饰符冲突与注意事项

冲突组合 说明
abstract + final abstract 方法需子类实现,final 禁止重写,二者矛盾。
abstract + private private 方法不可见,无法被重写,无法实现抽象方法。
static + abstract 静态方法属于类,无法被子类重写,与 abstract 冲突。
final + volatile final 变量不可变,volatile 无意义(允许但冗余)。
synchronized + abstract 抽象方法无实现,无法加锁,二者冲突。

六、常见修饰符组合

组合 典型场景 示例
public static final 定义全局常量 public static final int MAX_SIZE = 100;
private static 类内共享的静态变量 private static int instanceCount;
protected abstract 供子类实现的抽象方法 protected abstract void init();
public synchronized 线程安全的公共方法 public synchronized void add() { ... }

七、修饰符作用域总览

修饰符 接口 方法 变量 代码块 内部类 局部变量
public
protected
private
static
final
abstract
volatile
transient

八、关键总结

  1. 访问控制public > protected > 默认 > private,按需选择最小可见范围。
  2. 静态与非静态static 成员属于类,非静态成员属于实例。
  3. 不可变性final 修饰变量为常量,修饰类禁止继承。
  4. 线程安全synchronizedvolatile 是多线程编程的关键。
  5. 抽象与实现abstract 定义规范,子类负责具体实现。

通过合理使用修饰符,可以显著提升代码的安全性可维护性性能

posted @ 2025-04-24 15:24  火星程序员ty  阅读(8)  评论(0)    收藏  举报