default
无修饰的 类、字段、方法 只允许在同一个包内进行访问。
public
public修饰的 类、字段、方法 允许跨类、跨包访问。
protected
protected修饰的 类、字段、方法 允许本身的方法及子类(包括跨包的子类)访问。
private
private修饰的 类、字段、方法 只能被该类的对象访问。子类不能访问,跨包不能访问。
static
注:不影响修饰对象的访问权限。
- 类:内部类。
- 方法:静态方法不依赖于任何对象就能进行访问,所以方法内只能使用静态变量及静态方法。
- 字段(成员):静态成员被所有对象共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。静态成员的初始化顺序按照定义的顺序进行初始化。
- 代码块:静态代码块可以出现在类的任何一个地方,在类初次加载的时候按顺序执行,且只执行一次。
final
注:和Java程序性能优化没有必然联系。
- 类:final修饰的类不能被继承。
- 方法:final修饰的方法不能被重写。
- 变量:final修饰的基本数据类型的值不能被改变,修饰的对象的引用不能被改变,但是对象内部的属性可以被修改。用于保护只读数据。
abstract
注:可将子类封装为抽象内部类。
- 类:抽象类是只能定义类型,不能产生对象的类。使用抽象类,必须有子类的出现。
- 方法:在抽象类中只能声明,不能实现。出现抽象方法则类型一定是抽象类。抽象类的子类必须重写全部这些abstract方法。
synchronized
注:synchronized修饰对象可以保证在同一时刻只有一个线程访问。其他试图访问对象的线程将被堵塞。
- 代码块:被修饰的代码块称为同步语句块,线程访问限制的对象是调用代码块的对象。
- 方法:被修饰的方法称为同步方法,线程访问限制的对象是调用这个方法的对象;如果是static方法,线程访问限制的对象是这个类的所有对象。
native
- 方法:说明Java调用非Java代码的接口。方法的实现由非Java语言实现。
volatile
详解:https://www.cnblogs.com/zhengbin/p/5654805.html
- 变量:(可见性)volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
未说明:strictfp、transient