從靜態上下文引用非靜態成員

靜態變數和方法不是例項的一部分,無論你建立特定類的物件有多少,該變數始終都會有一個副本。

例如,你可能希望擁有一個不可變的常量列表,最好將它保持靜態並在靜態方法中初始化它一次。如果你定期建立特定類的多個例項,這將為你帶來顯著的效能提升。

此外,你還可以在類中使用靜態塊。你可以使用它為靜態變數分配預設值。當類載入到記憶體中時,它們只執行一次。

名稱建議的例項變數取決於特定物件的例項,它們可以為其提供服務。你可以在物件的特定生命週期中使用它們。

在該類的靜態方法中使用的類的所有欄位和方法必須是靜態的或本地的。如果你嘗試使用例項(非靜態)變數或方法,則程式碼將無法編譯。

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
    }
    
}