访问权限修饰符
Java 中,可以使用访问权限修饰符来控制对类、变量、方法和构造方法的访问。
修饰符 | 当前类 | 同一包内 | 不同包中子类 | 其他包 |
---|---|---|---|---|
public | Y | Y | Y | Y |
protected | Y | Y | Y/N | N |
Y | Y | N | N | |
private | Y | N | N | N |
注意:对于 protected 成员,同包中的类可以访问,在不同包中,只有子类中可以访问,并且只有这个子类的实例能够访问,其它子类或则基类实例都不能访问 protected 成员。
final
- final 变量
被 final 修饰的变量表示常量,赋值后,不能被重新赋值。
被 final 修饰的实例变量必须显式指定初始值。
- final 方法
final 修饰方法,表示最终方法,不能重写。
- final 类
final 修饰类,表示最终类,不能被继承。
static
-
声明静态成员变量
-
声明静态方法
abstract
- 修饰类
表示抽象类,抽象类不能用来实例化对象,声明抽象类是为了将来对该类进行扩充。
如果一个类包含抽象方法,那么该类一定要声明为抽象类。
- 修饰方法
表示抽象方法,抽象方法是一种没有任何实现的方法,该方法的具体实现由子类提供。
synchronized
synchronized 关键字声明的代码块同一时间只能被一个线程访问。
transient
序列化的对象包含被 transient 修饰的实例变量时,java 虚拟机(JVM)跳过该特定的变量。
该修饰符包含在定义变量的语句中,用来预处理变量的数据类型。
public transient int limit = 55; // 不会持久化
public int b; // 持久化
volatile
volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。
而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
一个 volatile 对象引用可能是 null。
public class Test {
private volatile boolean active;
public void run() {
active = true;
while (active) {
// 代码
}
}
public void stop() {
active = false;
}
}