Skip to content

静态字段和静态方法是与类相关联而不是与类的实例相关联的成员。它们可以直接通过类名访问,而无需创建类的实例。

静态字段

静态字段(Static Fields)是在类级别上定义的变量,所有该类的实例共享相同的值。这意味着当一个对象修改了静态字段的值,其他对象也会看到这个改变。以下是一个示例代码,演示如何声明和使用静态字段:

public class MyClass {
    public static int myStaticField; // 静态字段

    public static void main(String[] args) {
        MyClass.myStaticField = 10; // 直接通过类名访问静态字段
        System.out.println(MyClass.myStaticField); // 输出:10

        MyClass obj1 = new MyClass();
        MyClass obj2 = new MyClass();

        obj1.myStaticField = 20; // 修改静态字段的值
        System.out.println(obj2.myStaticField); // 输出:20(因为静态字段是共享的)

        obj2.myStaticField = 30;
        System.out.println(obj1.myStaticField); // 输出:30(由于静态字段是共享的)
    }
}

静态方法

静态方法(Static Methods)是在类级别上定义的方法,可以直接通过类名调用,无需创建类的实例。静态方法通常用于执行与类相关的操作,例如工具方法或者计算某些值。以下是一个示例代码,演示如何声明和使用静态方法:

public class MathUtils {
    public static int add(int a, int b) { // 静态方法
        return a + b;
    }

    public static void main(String[] args) {
        int result = MathUtils.add(5, 3); // 直接通过类名调用静态方法
        System.out.println(result); // 输出:8
    }
}

请注意,由于静态方法不依赖于实例的状态,因此它们无法直接访问非静态字段或非静态方法。如果需要在静态方法中使用这些成员,可以通过创建类的实例来访问它们。

接口的静态字段

因为interface是一个纯抽象类,所以它不能定义实例字段。但是,interface是可以有静态字段的,并且静态字段必须为final类型:

public interface Person { 
public static final int MALE = 1; 
public static final int FEMALE = 2;
}

实际上,因为interface的字段只能是public static final类型,所以我们可以把这些修饰符都去掉,上述代码可以简写为:

public interface Person { 
// 编译器会自动加上
public statc final: int MALE = 1;
int FEMALE = 2;
}

编译器会自动把该字段变为public static final类型。