1.用于定义访问权限修饰的关键字
a.private:
功能:最小访问权限,仅限当前类内部访问
场景:类的成员变量/方法、构造器,实现封装性(隐藏内部细节)
注意:不能修饰外部类,常与public的getter/setter方法配合使用
b.protexted:
功能:中等级别访问权限,可被同包类、子类(跨包)访问。
场景:需要被子类继承但限制同包外直接访问的成员(如父类方法/变量)。
注意:无法修饰外部类,子类访问父类的 protected 成员时,仅限继承关系,非继承关系的跨包子类不可直接访问。
c.public:
功能:最大访问权限,全工程(同项目/跨项目)均可访问。
场景:对外提供服务的类、接口、方法、常量(如工具类、API 接口)。
注意:过度使用会破坏封装性,需谨慎设计。
2.用于定义类,方法,变量修饰符的关键字
a.abstract:
功能:声明抽象类或抽象方法,表示“不完整”,需被子类实现/重写。
场景:
抽象类:包含抽象方法的类(不能实例化,需被继承),用于定义通用模板。
抽象方法:无方法体,强制子类实现具体逻辑。
注意:抽象类可包含普通方法和成员变量;抽象方法不能被 private / final 修饰。
b.final:
功能:表示“最终状态”,禁止修改或继承。
场景:
修饰类:不可被继承(如 String 、 Integer )。
修饰方法:不可被重写(防止核心逻辑被篡改)。
修饰变量:常量(需初始化,值不可变,推荐大写命名)。
注意: final 对象的引用不可变,但对象内部状态可能可变(如数组)。
c.static:
功能:属于类而非实例,用于共享数据和行为。
场景:
静态变量:所有实例共享(如计数器 private static int count )。
静态方法:无需实例即可调用(如工具方法 public static void sort() )。
静态代码块:类加载时执行一次(用于初始化静态资源)。
注意:静态方法不能直接访问非静态成员(需通过实例调用);静态内部类独立于外部类实例。
d.synchronized:
功能:线程同步锁,保证临界区代码的原子性。
场景:
修饰方法:锁定当前实例( synchronized void method() )或类( static synchronized void method() )。
修饰代码块:锁定指定对象( synchronized(obj) { ... } )。
注意:可能导致性能问题,需合理控制锁范围;Java 5 后推荐使用 Lock 接口替代部分场景。
3.用于定义类与类之间关系的关键字
a.extends:
功能:表示继承关系,子类继承父类的非私有成员。
场景:单继承(一个类只能有一个直接父类),用于代码复用和多态基础。
注意:Java 不支持多继承(但可通过接口实现类似效果);子类构造器隐式/显式调用父类构造器。
b.implements:
功能:表示实现接口关系,类必须实现接口的所有抽象方法。
场景:多实现(一个类可实现多个接口),定义规范(如 List 接口由 ArrayList / LinkedList 实现)。
注意:接口中的方法默认 public abstract ,变量默认 public static final ;JDK 8 后接口可包含默认方法和静态方法。
4.用于建立实例及引用关系实例,判断实例的关键字
a.new:
功能:创建对象实例,分配内存并调用构造器。
场景: ClassName obj = new ClassName(); ,完成对象的初始化。
注意:若构造器未显式定义,编译器会生成默认无参构造器。
b.this:
功能:指向当前对象的引用,用于区分局部变量和成员变量。
场景:
解决成员变量与参数同名冲突( this.name = name; )。
调用当前类的其他构造器( this(参数); ,需位于构造器首行)。
注意:静态上下文( static 方法/代码块)中不可使用 this 。
c.super:
功能:指向父类对象的引用,用于访问父类成员。
场景:
调用父类被重写的方法( super.method(); )。
访问父类构造器( super(参数); ,子类构造器首行隐式调用 super() )。
注意:只能在子类中使用,不能访问父类的私有成员
d.instanceof:
功能:判断对象是否为指定类或其子类的实例。
语法: 对象 instanceof 类/接口 ,返回 boolean 值。
场景:强制类型转换前的安全检查(避免 ClassCastException )。
注意: null instanceof 任何类型 返回 false ;子类对象 instanceof 父类一定为 true 。
5.用于异常处理的关键字
a.try、catch、finally:
try:包含可能抛出异常的代码块。
catch:捕获并处理特定类型的异常(可多个 catch 分层处理)。
finally:无论是否发生异常,必定执行的代码块(常用于资源释放,如关闭流)。
注意:JDK 7+ 支持 try-with-resources 自动释放资源;finally 中的 return 会覆盖 try/catch 的返回值(需谨慎)。
b.throw:
功能:主动抛出异常对象(语法: throw new 异常类(参数); )。
场景:业务逻辑校验失败时(如参数非法),或自定义异常场景。
注意:必须抛出 Throwable 子类对象(异常或错误)。
c.throws:
功能:声明方法可能抛出的异常(在方法签名后: 返回类型 方法名() throws 异常类列表
{ ... } )。
场景:告知调用者“该方法可能抛出异常,需自行处理”。
注意:仅用于声明受检异常(checked exception),不处理则必须由调用者处理或继续声明;不能声明运行时异常(unchecked exception)。
6.用于包的关键字
a.package:
功能:声明当前类所属的包(语法: package 包名; ,需位于文件首行)。
场景:避免命名冲突,组织代码层次(如 com.example.model.User )。
注意:包名建议全小写,采用域名反写规则(如公司域名 com.company )
b.import:
功能:导入其他包中的类,简化代码书写(避免全限定名)。
语法:
单个类: import 包名.类名; (如 import java.util.List; )。
通配符: import 包名.*; (导入包下所有类,不包含子包)。
场景:使用外部包的类时必须导入(除了 java.lang 包下的类,如 String 可直接使用)。
注意:静态导入( import static 包名.类名.静态成员; )可直接使用静态方法/变量,无需类名前缀
7.其他修饰符关键字
a.native:
功能:声明方法由非 Java 语言(如 C/C++)实现,Java 仅提供接口。
场景:调用系统底层功能(如 JNI 技术,Java 与操作系统交互)。
注意:方法体为空,实现代码在独立的 .dll / .so 文件中;需配合 C/C++ 代码开发。
b.strictfp:
功能:强制浮点运算遵循 IEEE 754 标准,保证跨平台一致性。
场景:需要精确浮点计算的科学计算或金融领域。
注意:可修饰类或方法,修饰后类中所有方法自动应用严格浮点规则;JVM 默认会优化浮点运算,strictfp 会禁用某些优化。
c.transient:
功能:标记实例变量不参与序列化(对象转字节流时忽略该字段)。
场景:敏感数据(如密码)或无需持久化的临时变量。
注意:反序列化时,transient 字段会被初始化为默认值(如 int 为 0);需配合 readObject() / writeObject() 自定义序列化逻辑
d.volatile:
功能:保证变量可见性(一个线程修改后,其他线程立即可见)和有序性(禁止指令重排)。
场景:多线程环境下的轻量级同步(替代 synchronized 的低开销方案)。
注意:不保证原子性(如 i++ 需配合 synchronized 或 AtomicInteger );适用于一个线程写、多个线程读的场景。
e.assert:
功能:断言机制,用于调试阶段验证假设条件是否成立。
语法: assert 条件 : 错误信息; (条件为 false 时抛出 AssertionError )。
场景:开发阶段检查程序逻辑正确性(如 assert index >= 0 : "索引不能为负" )。
注意:默认关闭(需通过 JVM 参数 -ea 启用);生产环境不建议依赖断言进行业务逻辑校验