Java 关键字与保留字字典:逐个给出语义、版本约束与示例。Java 语言关键字共 50 个(含两个保留字 const/goto 与三个上下文敏感的 true/false/null 字面量)。
1. abstract – 抽象
描述
类或方法只有声明没有实现;抽象类不能实例化,必须由子类实现全部抽象方法。
语法和示例
abstract class Shape {
abstract double area(); // 无方法体
void print() { // 抽象类可含具体方法
System.out.printf("%.2f%n", area());
}
}
class Circle extends Shape {
double r;
Circle(double r) { this.r = r; }
double area() { return Math.PI * r * r; }
}2. assert – 断言
描述
运行时校验不变量;默认禁用,-ea 开启。生产不要用它做业务校验。
语法和示例
int divide(int a, int b) {
assert b != 0 : "除数不能为 0"; // -ea 时生效
return a / b;
}3. boolean / byte / short / int / long / float / double / char – 基本类型
描述
8 种基本类型是值语义、非对象;byte 8 位到 double 64 位;char 是 16 位 UTF-16 单元。
语法和示例
int i = 42;
long l = 9_000_000_000L; // 下划线分位(7+)
double d = 3.14;
float f = 2.5f; // 必须 f 后缀
char c = '中'; // 单引号,可存中文
byte b = (byte) 200; // 溢出需显式转换 → -564. break / continue – 跳出与继续
描述
break 终止最近一层循环/switch;带标签跳出外层;continue 进入下一轮。
语法和示例
outer:
for (int[] row : grid) {
for (int v : row) {
if (v < 0) break outer; // 直接跳出双重循环
if (v == 0) continue; // 跳过本轮
sum += v;
}
}5. byte/short/int/long 与整型溢出
描述
int 上限 2147483647;溢出不报错而是回绕——大数用 long 或 BigInteger。
语法和示例
int max = Integer.MAX_VALUE;
System.out.println(max + 1); // -2147483648(回绕)
long big = 9_000_000_000L; // 超 int 范围必须 long
Math.addExact(max, 1); // 抛 ArithmeticException(需要检测时)6. case / default / switch – 分支
描述
传统 switch 有 fall-through(忘 break 是经典 bug);14+ 箭头语法无 fall-through。
语法和示例
// 传统(注意 break)
switch (day) {
case MON: case TUE:
System.out.println("工作日"); break; // 漏 break 会贯穿
default: break;
}
// 表达式(14+,推荐)
String type = switch (day) {
case SAT, SUN -> "周末";
default -> "工作日";
};7. catch / finally / try – 异常处理
描述
catch 按类型捕获(子类在前);finally 无论是否异常都执行(return 也拦不住);try-with-resources 自动关闭。
语法和示例
try (var in = new BufferedReader(new FileReader("a"))) {
process(in);
} catch (FileNotFoundException e) { // 先具体
log(e);
} catch (IOException e) { // 后宽泛
throw new UncheckedIOException(e);
} finally {
// 清理(try-with-resources 已覆盖大多数场景,少用)
}8. class / interface / enum / record – 类型声明
描述
class 可实例化模板;interface 是能力契约(default 方法可有实现);enum 实例固定的类;record 不可变数据载体(16+)。
语法和示例
interface Fly { default void fly() { System.out.println("飞"); } }
enum Level { LOW, MID, HIGH }
record Point(int x, int y) {}
class Bird implements Fly {}
// enum 可带构造与方法:
enum Planet {
MARS(6.4e23), EARTH(5.97e24);
final double mass;
Planet(double m) { mass = m; }
}9. const / goto – 保留字
描述
从未使用的保留字(C++ 移植兼容而设);写出来是编译错误。
语法和示例
// const int x = 1; // 编译错误:不是关键字也不可用
// goto label; // 同上10. extends / implements – 继承与实现
描述
单继承类(extends),多实现接口(implements);构造器不被继承,子类必须链式调 super。
语法和示例
class Base { Base(int x) {} }
class Sub extends Base {
Sub() { super(42); } // 不写则隐式 super() —— 父类无参构造不存在时编译错
}
interface A {} interface B {}
class C implements A, B {} // 接口可多实现11. final – 终态
描述
修饰变量=不可重赋值、方法=不可覆盖、类=不可继承;不是「不可变对象」。
语法和示例
final int X = 1; // 引用不可变
final List<String> list = new ArrayList<>();
list.add("a"); // 合法!final 管引用不管内容
final class Util {} // 不可继承
// String/StringBuilder 场景:字符串拼接见 StringBuilder 条目12. finally 语义细节
描述
finally 在 return 之前执行;finally 里 return 会吞掉异常/返回值——禁止这么写。
语法和示例
int f() {
try { return 1; }
finally { System.out.println("先打印这个"); } // return 前执行
}
int bad() {
try { return 1; }
finally { return 2; } // 反例:吞返回值,IDE 都会警告
}13. float / double 精度
描述
二进制浮点无法精确表示 0.1;算钱用 BigDecimal(字符串构造)。
语法和示例
System.out.println(0.1 + 0.2); // 0.30000000000000004
var price = new BigDecimal("19.99"); // 永远字符串构造
price.add(new BigDecimal("0.01"))
.setScale(2, RoundingMode.HALF_UP);14. for / while / do – 循环
描述
三种循环 + 增强 for(迭代器语法糖);集合遍历优先增强 for 或 stream。
语法和示例
for (int i = 0; i < 10; i++) {}
for (String s : list) {} // 增强 for(数组/Iterable)
while (it.hasNext()) {}
do { } while (cond); // 至少执行一次
// 迭代中删除必须用 Iterator.remove 或 removeIf
list.removeIf(x -> x.isEmpty());15. if / else – 条件
描述
标准条件;三元运算符 ? : 是表达式版。
语法和示例
int max = a > b ? a : b; // 三元
if (x instanceof String s && s.length() > 3) { // 16+ 模式匹配
use(s); // s 已自动解包
}16. import / package – 包与导入
描述
package 声明文件归属;import 静态导入常量/方法;* 导入不递归子包。
语法和示例
package com.example.app;
import java.util.List;
import java.util.*; // 本包所有类(不含子包)
import static java.lang.Math.max; // 静态导入
int m = max(1, 2);17. instanceof – 类型判断
描述
16+ 支持模式匹配,判断+绑定一步完成。
语法和示例
if (obj instanceof String s) { use(s); }
if (obj instanceof Integer i && i > 0) {}
// 老写法:if (obj instanceof String) { String s = (String) obj; }18. native – 本地方法
描述
声明由 JNI/panama 调用的本地实现;业务代码几乎不用。
语法和示例
native void fastCopy(byte[] src, byte[] dst);
// System.loadLibrary("mylib") 加载实现19. new – 实例化
描述
创建对象(数组也用它);record 的 new 自动生成访问器。
语法和示例
var p = new Point(1, 2);
int[] arr = new int[10];
String[] names = {"a", "b"}; // 数组字面量20. private / protected / public – 访问控制
描述
四级:private(本类)< 默认(同包)< protected(子类+同包)< public。
语法和示例
class A {
private int secret; // 仅本类
int packageOnly; // 默认:同包可见
protected int forSub; // 子类与同包
public int open; // 全部
}21. return – 返回
描述
void 方法可裸 return 提前退出;构造器没有返回值声明。
语法和示例
void check(int x) {
if (x < 0) return; // 提前退出
process(x);
}22. static – 静态
描述
属于类不属于实例;静态方法不能访问实例字段;static 嵌套类无外部实例引用。
语法和示例
class Counter {
static int total; // 全实例共享
static int next() { return ++total; } // 不能碰非静态字段
static class Helper {} // 静态嵌套类(vs 内部类持外部引用)
}23. strictfp – 严格浮点
描述
约束浮点跨平台一致;现代 CPU 与 17+ 后基本无感,历史兼容保留。
语法和示例
strictfp double calc() { return 0.1 + 0.2; }24. super – 父类引用
描述
调父类构造/方法/字段;匿名内部类里 Outer.super.method() 消歧。
语法和示例
class Sub extends Base {
Sub() { super(); }
@Override void run() {
super.run(); // 先跑父类逻辑
extra();
}
}25. synchronized – 同步
描述
方法或代码块互斥(锁对象);简单但粗粒度——高并发用 JUC。
语法和示例
class Safe {
private int n;
synchronized void inc() { n++; } // 锁 this
void inc2() { synchronized(this) { n++; } } // 等价写法
// 静态方法锁 Class 对象(与实例锁互不阻塞)
}26. this – 当前实例
描述
区分字段与参数、构造器链式调用 this(…)、内部类访问外部 this。
语法和示例
class A {
int x;
A(int x) { this.x = x; }
A() { this(0); } // 构造器互调必须第一行
class Inner { void f() { A.this.g(); } } // 内部类引用外部
}27. throw / throws – 抛出与声明
描述
throw 实际抛出;throws 声明受检异常;链式用 initCause 或构造器。
语法和示例
IOException read(String p) throws IOException { // 受检必须声明
if (p == null) throw new IllegalArgumentException("路径空");
throw new UncheckedIOException("读失败", cause);
}28. transient – 不序列化
描述
字段跳过默认序列化;需自定义 writeObject 时配合。
语法和示例
class Session implements Serializable {
transient Socket conn; // 不参与序列化
String userId;
}29. try-with-resources(语句而非关键字,但必备)
描述
AutoCloseable 声明即关;多个资源反序关闭;suppressed 异常可取。
语法和示例
try (var in = open(); var out = create()) {
in.transferTo(out);
} // 自动 in.close() 后 out.close(),异常互不覆盖30. volatile – 可见性
描述
写立即刷主存、读走主存,禁止指令重排;不保证原子性(count++ 依然丢)。
语法和示例
class Flag {
private volatile boolean running = true; // 一线程改,多线程立即可见
// AtomicInteger 才是原子计数;volatile 只管可见性
}31. while 条件陷阱
描述
do-while 至少一次;赋值=在条件里是合法但危险的表达式。
语法和示例
int v;
do { v = next(); } while (v < 0); // 至少调一次
// while ((line = reader.readLine()) != null) 老惯用法,可读性差32. true / false / null – 字面量
描述
技术上不是关键字而是字面量保留;null 可强转任意引用类型。
语法和示例
String s = null;
Object o = (String) null; // 合法但无意义
Boolean boxed = null; // 拆箱时 NPE 高发