在 Java 中,访问修饰符和其他修饰符控制着类、方法和字段的可见性和行为。以下是它们的总结:
访问修饰符
-
public
- 含义:类、方法或字段可以被任何其他类访问。
- 适用场景:当你希望类、方法或字段能够被其他包中的类访问时使用。
- 例子:
public class MyClass { public int myField; public void myMethod() { } }
-
private
- 含义:类、方法或字段只能在定义它的类内部访问。
- 适用场景:用于封装数据,确保字段和方法不被其他类直接访问或修改。
- 例子:
public class MyClass { private int myField; private void myMethod() { } }
-
protected
- 含义:类、方法或字段可以被同一个包中的类和任何子类(即使在不同包中)访问。
- 适用场景:当你希望子类能够访问父类的字段或方法时使用。
- 例子:
public class MyClass { protected int myField; protected void myMethod() { } }
-
无修饰符(包级私有,默认)
- 含义:类、方法或字段只能在同一个包中访问。
- 适用场景:当你希望只有同一包内的类能访问这些成员时使用。
- 例子:
class MyClass { int myField; // 默认为包级私有 void myMethod() { } }
其他修饰符
-
final
- 字段:一旦初始化后,字段的值不能被修改(即常量)。
- 方法:该方法不能被子类重写。
- 类:该类不能被继承。
- 例子:
public final class MyClass { public final int myField = 10; public final void myMethod() { } }
-
static
- 字段:属于类而不是类的实例,即所有实例共享同一个字段。
- 方法:属于类而不是类的实例,通常用于无需访问实例变量的工具方法。
- 例子:
public class MyClass { public static int myStaticField; public static void myStaticMethod() { } }
-
abstract
- 类:不能被实例化,只能作为其他类的基类。
- 方法:没有方法体,必须由子类实现。
- 例子:
public abstract class MyClass { public abstract void myMethod(); }
-
synchronized
- 方法:确保方法在同一时间内只有一个线程可以执行,常用于多线程编程。
- 块:用于代码块的同步。
- 例子:
public synchronized void mySynchronizedMethod() { }
-
volatile
- 字段:确保字段的值在多个线程间的可见性,避免线程缓存问题。
- 例子:
private volatile boolean myFlag;