在Java中,关键字和保留字是两类具有特殊意义的标识符,它们被语言本身占用,不能作为变量名、方法名、类名等自定义标识符使用。理解它们的区别与用途,是掌握Java语法的第一步。

查看官网关键字和保留字:

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html

1. 关键字(Keyword)

关键字是Java语言预定义的、具有特定语法功能的单词。它们全部为小写,编译器能够识别并赋予它们特殊含义。

Java关键字列表(按功能分类)

分类 关键字 说明
数据类型 byte, short, int, long, float, double, char, boolean 基本数据类型
引用类型 class, interface, enum, record(Java 14+) 定义类、接口、枚举、记录
流程控制 if, else, switch, case, default, while, do, for, break, continue, return 条件、循环、跳转
异常处理 try, catch, finally, throw, throws 异常捕获与声明
访问控制 private, protected, public 可见性修饰符
修饰符 abstract, static, final, strictfp, native, synchronized, transient, volatile 类、方法、变量修饰
类/实例相关 new, this, super, instanceof 对象创建、引用、类型检查
包相关 package, import 包管理与导入
断言 assert 断言调试(Java 1.4+)
模块系统 module, requires, exports, opens, uses, provides, with(Java 9+) 模块化系统关键字
其他 void, null(字面量),true, false(布尔字面量) 特殊值占位

注意:
关键字一共50个truefalsenull不在其中,它们看起来像关键字,其实是字面量,表示特殊的布尔值和空值,但同样不能用作标识符。
字面量(Literal) 是直接在代码中表示固定值的符号。它们是程序中直接写出的数据,不需要通过变量或计算来获取。字面量直接对应某种数据类型的值,是程序中表示数据的“字面形式”。

2. 保留字(Reserved Word)

保留字是指当前Java版本尚未使用,但未来版本可能用作关键字的单词。目前Java中有两个保留字:
goto:在C/C++中用于无条件跳转,Java虽未实现,但保留以备将来使用。

const:在C/C++中定义常量,Java中使用final代替,但const仍被保留。

重要: 虽然 gotoconst目前没有实际语法意义,但程序员仍不能将它们用作标识符,否则编译会报错。

3. 关键字的演变

随着Java版本的演进,陆续新增了一些关键字:

版本 新增关键字
Java 1.2 strictfp
Java 1.4 assert
Java 5 enum
Java 9 module, requires, exports, opens, uses, provides, with, transitive
Java 14 record(预览,Java 16正式)
Java 15 sealed, permits(预览,Java 17正式)
Java 17 sealed, permits(正式)

注意recordsealedpermits等虽然在新版本中成为关键字,但在旧版本中可能允许用作标识符。为保持代码的向前兼容性,应避免使用这些潜在的关键字作为标识符。

4. 关键字与保留字的使用规则

  1. 绝对不能用作标识符:任何关键字、保留字、true、false、null都不能作为变量名、方法名、类名、包名等。

  2. 严格区分大小写:所有关键字均为小写,Public或CLASS都不是关键字,但为避免混淆,不应使用此类命名。

  3. 标识符命名规范:虽然允许使用$和_,但官方推荐使用字母、数字、下划线的组合,且以字母开头,避免与关键字混淆。

5. 常见误区

  • constgoto并不是“没用”:它们是保留字,不允许使用,即使你写int const = 10;也会编译失败。

  • truefalsenull虽然可以出现在代码中,但不能被重定义,例如不能写String null = "abc";。

  • 新版本关键字在旧版JDK中可能不是关键字,但为了跨版本兼容,建议始终避开这些名称。