在 Java 中,修饰符用于控制类、方法、变量等的访问权限和行为。主要的修饰符可以分为两大类:访问修饰符和非访问修饰符。下面是对这些修饰符的详细讲解。
1. 访问修饰符
访问修饰符决定了类、方法和变量的可见性。Java 提供了四种访问修饰符:
1.1. public
-
说明:被
public
修饰的类、方法或变量可以被任何其他类访问。 -
示例:
1.2. protected
-
说明:被
protected
修饰的成员可以被同一包中的其他类访问,或者被子类访问,即使它们在不同的包中。 -
示例
1.3.
default
(包级私有) -
说明:如果没有指定访问修饰符,则默认为
default
,即包级私有。这样的成员只能被同一包中的其他类访问。 -
示例:
1.4. private
-
说明:被
private
修饰的成员只能在定义它的类内部访问,外部类无法访问。 -
示例:
2. 非访问修饰符
非访问修饰符用于指定类、方法和变量的其他特性。
2.1. static
-
说明:被
static
修饰的成员属于类本身,而不是类的实例。可以通过类名直接访问。 -
示例:
2.2. final
-
说明:被
final
修饰的成员不能被修改。对于类,表示不能被继承;对于方法,表示不能被重写;对于变量,表示不能重新赋值。 -
示例:
2.3. abstract
-
说明:被
abstract
修饰的类不能被实例化,必须由子类继承并实现其抽象方法。抽象方法没有方法体,子类需要提供实现。 -
示例:
synchronized
-
说明:用于控制对方法或代码块的访问,以防止线程间的竞争条件。标记为
synchronized
的方法在同一时间只能被一个线程访问。 -
示例:
2.5. volatile
-
说明:用于指示变量可能会被多个线程修改,确保变量的值在多个线程之间保持一致性。
-
示例:
3. 访问修饰符的优先级
访问修饰符有四种:public
、protected
、default
(包级私有)和 private
。它们的优先级从高到低如下:
private
:仅可在定义它的类中访问。protected
:可在同一包中的类及不同包中的子类中访问。default
(无修饰符):仅可在同一包中的类中访问。public
:可被任何类访问
4. 非访问修饰符的优先级
非访问修饰符包括 static
、final
、abstract
、synchronized
和 volatile
,其优先级并不严格,但一般的组合顺序是:
abstract
(用于类和方法)final
(用于类、方法和变量)static
(用于变量和方法)synchronized
(用于方法和代码块)volatile
(用于变量)
总结
理解和使用 Java 的修饰符对于编写安全、高效和可维护的代码至关重要。