Java修饰符总结
访问控制修饰符
修饰符 | 当前类 | 同一包内 | 子孙类(同一包) | 子孙类(不同包) | 其他包 |
---|---|---|---|---|---|
public | Y | Y | Y | Y | Y |
protected | Y | Y | Y | Y/N(具体说明) | N |
default | Y | Y | Y | N | N |
private | Y | N | N | N | N |
Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。
public : 对所有类可见。使用对象:类、接口、变量、方法。
protected : 对同一包内的类和所有子类可见。使用对象:变.量、方法。不能修饰类(外部类)。
default (即默认): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
private : 在同一类内可见。使用对象:变量、方法。 不能修饰类(外部类)
类和方法缺省修饰符,默认是什么?
Class:Default Modifier internal
Function:Default Modifier private
internal 是在程序集内部中可见。
public 无限制的。
用访问控制符来修饰类,修饰方法,修饰属性,修饰代码块。
修饰类:
顶级类(最上面一层的类)只能用public 修饰,顶级类不能使用private 和protected 修饰。
外部类可以被public修饰或者default默认不写,不能用private和protected。
内部类可为静态static,可用protected和private修饰。
修饰方法:
一般的方法和构造方法都可以被四个访问修饰符修饰。
抽象类中的抽象方法不能被private修饰,可以被其他三个修饰。
而接口中的方法只能被public修饰(默认也是public)。
修饰属性:
属性可以被四个修饰符修饰,
但是接口中的属性只能被public修饰(默认也是public)。
修饰代码块:
代码块不能被任何修饰符修饰(因为在代码块里面的属性和方法都有自己的修饰符)。
构造代码块的作用:可以初始化非静态属性,构造代码块优先于构造函数执行,可以放在构造函数中。
静态代码块的作用:可以初始化静态属性,类加载时加载,不可以放在构造函数中。
其他修饰符
修饰符final:
修饰类:最终类,最终类不能被继承。
修饰方法:用final修饰的方法不能被继承,不能被重写,但是可以重载。
常量:定义局部常量用final,定义全局常量用static final (或者final static)。
修饰符static:
修饰类:可以修饰内部类
修饰属性:static可以修饰任何属性。
修饰方法:不能修饰抽象方法,不能修饰构造方法。
修饰代码块:被修饰的代码块叫静态代码块。
修饰符abstract
修饰类(是抽象类):抽象类不能被实例化。抽象类是用来被继承的。
修饰方法(抽象方法):修饰的方法叫做抽象方法,只有方法的声明,没有方法的实现。
不能修饰:不能修饰属性、私有方法、构造器、静态方法、final 方法。
修饰符synchronized
synchronized 关键字声明的方法同一时间只能被一个线程访问。synchronized 修饰符可以应用于四个访问修饰符。
修饰符transient
序列化的对象包含被 transient 修饰的实例变量时,java 虚拟机(JVM)跳过该特定的变量。
该修饰符包含在定义变量的语句中,用来预处理类和变量的数据类型。
修饰符volatile
volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。一个 volatile 对象引用可能是 null。