3.7 修饰符总结

如前所示,类、接口和它们的成员都能使用一个或多个修饰符声明——这些修饰符是 publicstaticfinal 等关键字。下面对本章做个总结,列出所有 Java 修饰符,说明各自能修饰的 Java 结构种类和作用。详情如表 3-2 所示。还可以参阅 3.1 节、3.2.1 节和 2.6.2 节。

表3-2:Java修饰符

修饰符用于意义
abstract这个类不能实例化,而且可能包含未实现的方法
接口所有接口都是抽象的。声明接口时这个修饰符是可选的
方法这个方法没有主体,主体由子类提供。签名后面是一个分号。所在的类必须也是抽象的
default方法这个接口方法的实现是可选的。接口为不想实现这个方法的类提供了一个默认实现。详情参见第 4 章
final不能创建这个类的子类
方法不能覆盖这个方法
字段这个字段的值不能改变。static final 修饰的字段是编译时常量
变量值不能改变的局部变量、方法参数或异常参数
native方法这个方法使用某种与平台无关的方式实现(经常使用 C 语言)。没有提供主体,签名后面是一个分号
无(包)没声明为 public 的类只能在包中访问
接口没声明为 public 的接口只能在包中访问
成员没声明为 privateprotectedpublic 的成员具有包可见性,只能在包中访问
private成员这个成员只在定义它的类中可以访问
protected成员这个成员只在定义它的包中和子类中可以访问
public能访问所在包的地方都能访问这个类
接口能访问所在包的地方都能访问这个接口
成员能访问所在类的地方都能访问这个成员
strictfp这个类中的所有方法都隐式声明为 strictfp
方法这个方法必须使用严格遵守 IEEE 754 标准的方式执行浮点运算。具体而言,所有数值,包括中间结果,都要使用 IEEEfloatdouble 类型表示,而且不能利用本地平台浮点格式或硬件提供的额外精度或取值范围。这个修饰符极少使用
static使用 static 声明的内部类是顶层类,而不是所在类的成员。详情参见第 4 章
方法static 方法是类方法。不隐式传入 this 对象引用。可通过类名调用
字段static 字段是类字段。不管创建多少类实例,这个字段都只有一个实例。可通过类名访问
初始化程序这个初始化程序在加载类时运行,而不是创建实例时运行
synchronized方法这个方法对类或实例执行非原子操作,所以必须小心,确保不能让两个线程同时修改类或实例。对 static 方法来说,执行方法之前先为类获取一个锁。对非 static 方法来说,会为具体的对象实例获取一个锁。详情参见第 5 章
transient字段这个字段不是对象持久化状态的一部分,因此不会随对象一起序列化。在对象序列化时使用,参见 java.io.ObjectOutputStream
volatile字段这个字段能被异步线程访问,因此必须对其做些特定的优化。这个修饰符有时可以替代 synchronized。详情参见第 5 章