下表列出Java语言中的类、方法、成员变量、局部变量可以使用的各种修饰符:
修饰符 | 类 | 方法 | 成员变量 | 局部变量 |
---|---|---|---|---|
abstract(抽象) | √ | √ | — | — |
static(静态) | √ | √ | √ | — |
public(公共) | √ | √ | √ | — |
protetced(保护) | √ | √ | √ | — |
pricvate(专用) | — | √ | √ | — |
synchorized(同步化) | — | √ | — | — |
native(本地) | — | √ | — | — |
transient(过度) | — | — | √ | — |
volatile(易失的) | — | — | √ | — |
final(最综的) | √ | √ | √ | √ |
下面对java中10个修饰符的介绍:
1.public
使用对象:类,接口,成员
无论所属的包定义在哪,该类(接口,成员)都是可以访问的
2.private
使用对象:成员
成员只可以在定义它的类中被访问
3.protected
使用对象:成员
protected成员只能在定义它的包中被访问,如果在其他包中被访问,则实现这个方法的类必须是改成员所属类的子类
4.static
使用对象:类,方法,变量,初始化函数
static修饰的内部类是一个顶级类,它和类包含的成员是不相关的。静态方法是类方法,属于所属的类而不是类的实例。静态变量是类变量,无论该变量所在的类创建了多少实例,该变量只存在一个实例被指向到所属的类而不是类的实例。初始化函数是在装载类时执行的,而不是在创建实例时执行的。
5.final
使用对象:类,方法,变量
被定义的final类不允许出现子类,不能被覆盖,变量值不允许被修改。
6.abstract
使用对象:类,接口,方法
abstract类中包括没有实现的方法,不能被实例化。abstract方法的方法体为空,该方法的实现在子类中被定义,并且包含一个abstract方法的类必须是一个abstract类。
7.native
使用对象:成员
与操作系统有关,定义时并不定义其方法,方法被一个外部的库实现。
8.synchorized
使用对象:方法
对于一个静态的方法,在执行之前JVM把它所在的类锁定;对于一个非静态类的方法,执行之前把某个特定的对象实例锁定。
9.volatile
使用对象:变量
因为异步线程可以访问变量,所以有些优化操作时一定不能作用在变量上的。volatile有时可以替代synchorized.
10.transient
使用对象:变量
变量不是对象持久状态的一部分,不应该把变量和对象一起串起。