在 Java 中,修饰符(Modifiers)用于定义类、方法、变量和构造器的特性。修饰符可以控制访问权限、线程行为、继承能力等方面。Java 中的修饰符主要分为 访问修饰符非访问修饰符类修饰符


目录

  1. 访问修饰符
  2. 非访问修饰符
  3. 类修饰符
  4. 参考资料
  5. 出站链接

1. 访问修饰符

访问修饰符控制类、方法和变量的访问权限。Java 提供了四种访问修饰符:

(1) public

  • 作用public 修饰符使得类、方法或变量可以被任何其他类访问。
  • 适用范围:任何类、方法、字段都可以被外部类访问。

示例:

public class MyClass {
    public int publicVar;

    public void publicMethod() {
        System.out.println("This is a public method.");
    }
}

(2) protected

  • 作用protected 修饰符使得类、方法或变量可以被同一包中的其他类访问,或者是继承该类的子类访问。
  • 适用范围:同一包中的类、继承该类的子类。

示例:

public class MyClass {
    protected int protectedVar;

    protected void protectedMethod() {
        System.out.println("This is a protected method.");
    }
}

(3) default(包级别访问权限)

  • 作用:如果没有显式指定访问修饰符,默认为 default,即包级别访问权限。只能在同一个包中访问,无法在包外访问。
  • 适用范围:同一包中的类。

示例:

class MyClass {
    int defaultVar;

    void defaultMethod() {
        System.out.println("This is a default method.");
    }
}

(4) private

  • 作用private 修饰符使得类、方法或变量只能在当前类内部访问,外部无法访问。
  • 适用范围:只能在同一类内部访问。

示例:

public class MyClass {
    private int privateVar;

    private void privateMethod() {
        System.out.println("This is a private method.");
    }
}


2. 非访问修饰符

非访问修饰符用于控制类、方法、变量和构造器的行为,常见的非访问修饰符包括 staticfinalabstractsynchronized 等。

(1) static

  • 作用static 修饰符用于类的成员(方法或变量),表示该成员是属于类而不是对象的。即类的所有实例共享同一份静态成员。
  • 适用范围:可以用于字段、方法和内部类。

示例:

public class MyClass {
    static int count = 0;  // 静态变量

    static void incrementCount() {  // 静态方法
        count++;
    }
}

(2) final

  • 作用final 修饰符用于类、方法和变量:
    • 用于变量时,表示变量为常量,一旦赋值后不可更改。
    • 用于方法时,表示方法不能被子类重写。
    • 用于类时,表示该类不能被继承。

示例:

public class MyClass {
    final int MAX_VALUE = 100;  // 常量

    final void finalMethod() {  // 不能被重写
        System.out.println("This is a final method.");
    }

    // final class MySubClass extends MyClass {}  // 错误:不能继承 final 类
}

(3) abstract

  • 作用abstract 修饰符用于类和方法:
    • 用于类时,表示该类不能被实例化,必须被继承。
    • 用于方法时,表示该方法没有实现,必须在子类中实现。

示例:

abstract class Animal {  // 抽象类
    abstract void sound();  // 抽象方法
}

class Dog extends Animal {
    void sound() {
        System.out.println("Bark");
    }
}

(4) synchronized

  • 作用synchronized 修饰符用于方法或代码块,表示该方法或代码块是线程安全的。多个线程在访问该方法时会被同步,以防止数据冲突。

示例:

public class MyClass {
    synchronized void synchronizedMethod() {
        // 线程安全的代码
        System.out.println("This is a synchronized method.");
    }
}

(5) transient

  • 作用transient 修饰符用于变量,表示该变量不会被序列化。如果一个对象需要进行序列化,标记为 transient 的变量将被忽略。

示例:

public class MyClass implements java.io.Serializable {
    transient int transientVar;  // 不会被序列化
}


3. 类修饰符

类修饰符用于控制类的行为,常见的修饰符包括 publicabstract

(1) public

  • 作用public 类修饰符表示该类可以被任何类访问。如果没有指定修饰符,类默认为包级别的访问权限。

示例:

public class MyClass {
    // 公有类可以被其他包中的类访问
}

(2) abstract

  • 作用abstract 类修饰符表示该类不能被实例化,必须由子类继承并实现其抽象方法。

示例:

abstract class MyClass {
    abstract void display();
}


参考资料


出站链接