访问控制 | private | protected | public | ||||
---|---|---|---|---|---|---|---|
类,方法和变量修饰符 | abstract | class | extends | final | implements | interface | native |
new | static | strictfp | synchronized | transient | volatile | strictfp | |
var | record | ||||||
程序控制 | break | continue | return | do | while | if | else |
for | instanceof | switch | case | default | |||
错误处理 | try | catch | throw | throws | finally | assert | |
包相关 | import | package | |||||
基本类型 | boolean | byte | char | double | float | int | long |
short | |||||||
变量引用 | super | this | void | ||||
枚举 | enum | ||||||
未使用(保留) | goto | const | _ |
有关Java关键字的一些值得注意的要点:
- **const**和**goto**是受人敬畏的单词,但未使用。
- **true**,**false**和**null**是 **literals (**文字),而不是关键字,也不是保留字,但是,它们仍然不能用作程序中的标识符。
- 从Java 8开始,**default**关键字也用于在接口中声明默认方法。
- 从Java 10开始,单词 **var** 用于声明局部变量(局部变量类型推断)。为了向后兼容,你仍然可以使用**var**作为变量名。因此**var**是保留字,而不是关键字。
- 所有关键字均为小写。
关键字const
和goto
被保留,即使它们当前未使用。如果这些C ++关键字错误地出现在程序中,这可能使Java编译器产生更好的错误消息。_
保留关键字(下划线),以备将来在参数声明中使用。
有时会错误地将各种字符序列假定为关键字:
true
并且false
不是关键字,而是布尔文字(第3.10.3节)。null
不是关键字,而是空文字(第3.10.8节)。var
并且yield
不是关键字,而是受限制的标识符(第3.8节)。var
作为局部变量声明的类型(§14.4,§14.14.1,§14.14.2,§14.20.3)和lambda形式参数的类型(§15.27.1)具有特殊含义。 yield
在yield
声明中具有特殊含义(第14.21节)。yield
必须对限定名为的方法的所有调用 进行限定,以便与yield
语句区分开 。进一步的十个字符的序列是_受限制的关键字_: open
,module
,requires
,transitive
,exports
,opens
,to
, uses
,provides
,和with
。这些字符序列被标记化的如仅其中它们显示为终端关键字_ModuleDeclaration_, ModuleDirective,和 RequiresModifier_制作(§7.7)。它们被标记为其他任何地方的标识符,以与引入受限关键字之前编写的程序兼容。有一个例外:requires
在_ModuleDirective 生成中字符序列的右侧,transitive
除非后面有分隔符,否则该字符序列将被标记为关键字,在这种情况下,该字符序列将被标记为标识符。
private 关键字是访问控制修饰符,可以应用于类、方法或字段(在类中声明的变量)。 只能在声明 private(内部)类、方法或字段的类中引用这些类、方法或字段。在类的外部或者对于子类而言,它们是不可见的。
protected 关键字是可以应用于类、方法或字段(在类中声明的变量)的访问控制修饰符。可以在声明 protected 类、方法或字段的类、同一个包中的其他任何类以及任何子类(无论子类是在哪个包中声明的)中引用这些类、方法或字段。
public 关键字是可以应用于类、方法或字段(在类中声明的变量)的访问控制修饰符。 可能只会在其他任何类或包中引用 public 类、方法或字段。
那么我们总结一下,Java之中的权限访问修饰符(其实还有一种权限访问情况,就是默认情况,暂且称作default吧):