Java修饰符
Java语言提供了很多修饰符,主要分为以下两类:
- 访问控制修饰符
- 非访问控制修饰符
访问控制修饰符
Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。
- public,将一个类声明为公共类,这个类对所有类可见。使用对象:类、接口、变量、方法
- private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
- protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
- default (缺省,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
作用域 | 当前类 | 同一包内(包括子孙类) | 子孙类(不同包) | 其他包 |
---|---|---|---|---|
public | Y | Y | Y | Y |
private | Y | N | N | N |
protected | Y | Y | Y:可以访问其从基类继承而来的 protected 方法 N:不能访问基类实例的protected方法 | N |
default | Y | Y | N | N |
类继承
- 父类中声明为 public 的方法在子类中也必须为 public。
- 父类中声明为 protected 的方法在子类中要么声明为 protected,要么声明为 public,不能声明为 private。
- 父类中声明为 private 的方法,不能够被继承
非访问修饰符
static:用来修饰类方法和类变量。
final:用来修饰类、方法和变量。修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的
abstract :用来创建抽象类和抽象方法
transient :序列化的对象包含被 transient 修饰的实例变量时,java 虚拟机(JVM)跳过该特定的变量
synchronized :用于线程编程,保证线程互斥的访问同步代码、保证共享变量的修改能够及时可见,还能有效解决重排序问题。
volatile:修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。