使用静态与此

Static 提供了一个方法或变量存储,它没有为每个类实例分配。相反,静态变量在所有类成员之间共享。顺便说一句,尝试将静态变量视为类实例的成员将导致警告:

public class Apple {
    public static int test;
    public int test2;
}

Apple a = new Apple();
a.test = 1; // Warning
Apple.test = 1; // OK
Apple.test2 = 1; // Illegal: test2 is not static
a.test2 = 1; // OK

声明为 static 的方法的行为方式大致相同,但有一个额外的限制:

你不能在其中使用 this 关键字!

public class Pineapple {

    private static int numberOfSpikes;   
    private int age;

    public static getNumberOfSpikes() {
        return this.numberOfSpikes; // This doesn't compile
    }

    public static getNumberOfSpikes() {
        return numberOfSpikes; // This compiles
    }

}

通常,最好声明适用于类的不同实例(例如克隆方法)static 的泛型方法,同时将 equals() 等方法保持为非静态方法。Java 程序的 main 方法总是静态的,这意味着关键字 this 不能在 main() 中使用。