Java 修饰符主要用于定义类、方法或变量,通常放在语句的最前端,可分为访问修饰符和非访问修饰符两类。
一、访问修饰符
- public:对所有类可见,可用于类、接口、变量和方法。被声明为 public 的类、方法、构造方法和接口能够被任何其他类访问。
- protected:对同一包内的类和所有子类可见,可用于变量和方法,但不能修饰外部类。当子类与基类不在同一包中时,子类实例可以访问其从基类继承而来的 protected 方法,而不能访问基类实例的 protected 方法。
- default(默认):在同一包内可见,不使用任何修饰符,可用于类、接口、变量和方法。
- private:在同一类内可见,只能用于变量和方法,不能修饰外部类。用 private 修饰的类成员,只能被该类自身的方法访问和修改,而不能被任何其他类访问和引用。
二、非访问修饰符
- static:用来修饰类方法和类变量。静态变量无论一个类实例化多少对象,都只有一份拷贝;静态方法独立于对象,不能使用类的非静态变量。
- final:用来修饰类、方法和变量。final 修饰的类不能被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,不可修改。
- abstract:用来创建抽象类和抽象方法。抽象类不能用来实例化对象,抽象方法没有具体实现,必须在子类中重写。一个类不能同时被 abstract 和 final 修饰。
- synchronized:用于多线程,声明的方法同一时间只能被一个线程访问,可应用于四个访问修饰符。
- volatile:用于修饰成员变量,保证其在多线程环境下的可见性,即每次被线程访问时,都强制从共享内存中重新读取该成员变量的值,当成员变量发生变化时,会强制线程将变化值回写到共享内存。
- transient:修饰变量时,表示该变量在对象序列化时会被跳过。