|
外部类/接口
|
成员属性
|
方法
|
构造器
|
初始化块
|
成员内部类
|
局部成员
|
public
|
√
|
√
|
√
|
√
|
|
√
|
|
protected
|
|
√
|
√
|
√
|
|
√
|
|
包访问控制符
|
√
|
√
|
√
|
√
|
〇
|
√
|
〇
|
private
|
|
√
|
√
|
√
|
|
√
|
|
abstract
|
√
|
|
√
|
|
|
√
|
|
final
|
√
|
√
|
√
|
|
|
√
|
√
|
static
|
|
√
|
√
|
|
√
|
√
|
|
strictfp
|
√
|
|
√
|
|
|
√
|
|
synchronized
|
|
|
√
|
|
|
|
|
native
|
|
|
√
|
|
|
|
|
transient
|
|
√
|
|
|
|
|
|
volatile
|
|
√
|
|
|
|
|
|
default
|
|
|
√
|
|
|
|
|
strictfp关键字的含义是FP-strict,也就是精确浮点的意思。在java虚拟机运行浮点运算时,如果没有指定strictfp关键字,java的编译器和运行时环境在浮点运算上不一定令人满意。一旦使用了strictfp来修饰类、接口或者方法时,那么在所修饰的范围内Java的编译器和运行时环境会完全一招浮点规范IEEE-754来执行。因此,如果想让浮点运算更加精确,就可以使用strictfp关键字来修饰类、接口或者方法。
native关键字主要用于修饰一个方法,使用native修饰的方法类似于一个抽象方法。与抽象方法不同的是,native方法通常采用C语言来实现。如果某个方法需要利用平台相关特性,或者访问系统硬件等,则可以使用native修饰该方法,再把该方法交给C去实现。一旦Java程序中包含了native方法,这个程序将失去跨平台的功能。
abstract和final不能同时使用;abstract和static不能同时修饰方法,可以同时修饰内部类;abstract和private不能同时修饰方法,可以同时修饰内部类。private和final同时修饰方法语法上合法,但没有意义——由于private修饰的方法不可能被子类重写,因此使用final修饰没什么意义。