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