从静态上下文引用非静态成员

静态变量和方法不是实例的一部分,无论你创建特定类的对象有多少,该变量始终都会有一个副本。

例如,你可能希望拥有一个不可变的常量列表,最好将它保持静态并在静态方法中初始化它一次。如果你定期创建特定类的多个实例,这将为你带来显着的性能提升。

此外,你还可以在类中使用静态块。你可以使用它为静态变量分配默认值。当类加载到内存中时,它们只执行一次。

名称建议的实例变量取决于特定对象的实例,它们可以为其提供服务。你可以在对象的特定生命周期中使用它们。

在该类的静态方法中使用的类的所有字段和方法必须是静态的或本地的。如果你尝试使用实例(非静态)变量或方法,则代码将无法编译。

public class Week {
    static int daysOfTheWeek = 7; // static variable
    int dayOfTheWeek; // instance variable
    
    public static int getDaysLeftInWeek(){
        return Week.daysOfTheWeek-dayOfTheWeek; // this will cause errors
    }

    public int getDaysLeftInWeek(){
        return Week.daysOfTheWeek-dayOfTheWeek; // this is valid
    }

    public static int getDaysLeftInTheWeek(int today){
        return Week.daysOfTheWeek-today; // this is valid
    }
    
}