Java範例和靜態方法


類可以有兩種型別的方法:範例方法和類方法。 範例方法和類方法也分別稱為類的非靜態方法和靜態方法。

範例方法用於實現類的範例的行為。 範例方法只能在類的範例的上下文中呼叫。類方法用於實現類本身的行為。類方法可在類的上下文中執行。

static 修飾符用於定義類方法。 方法宣告中不使用static修飾符,那麼該方法則是一個範例方法。

範例

以下是宣告一些靜態和非靜態方法的範例:

// A  static or  class method, 使用了 `static` 修飾符
static void  aClassMethod()  {

}

// A  non-static or  instance method  , 未使用 `static` 修飾符
void  anInstanceMethod()  {

}

注意

當呼叫類的靜態方法時,類的範例可能不存在。 因此,不允許從靜態方法內部參照範例變數。

類定義一載入到記憶體中,類變數就存在。 類定義在建立類的第一個範例之前就載入到記憶體中。類方法或靜態方法只能參照類的變數或類的靜態變數。 範例方法或非靜態方法可以參照類變數以及類的範例變數。

以下程式碼演示了在方法中存取的類欄位的型別。

public class Main {
  static int m = 100; // A static variable
  int n = 200; // An instance variable

  // Declare a static method
  static void printM() {

    /*
     * We can refer to only static variable m in this method because you are
     * inside a static method
     */
    System.out.println("printM() - m   = " + m);
    // 注意這裡邊不能存取 範例變數 - n
  }

  // Declare an instance method
  void printMN() {
    /* We can refer to both static and instance variables m and n in this method */
    System.out.println("printMN() - m   = " + m);
    System.out.println("printMN() - n  = " + n);
  }
}

呼叫方法

在方法的主體中執行程式碼稱為呼叫方法。範例方法和類方法是以不同方式呼叫。使用點表示法在類的範例上呼叫範例方法。

<instance reference>.<instance method name>(<actual parameters>)

在呼叫類的範例方法之前,必須先參照一個類的範例(或建立一個類範例)。

以下程式碼顯示如何呼叫Main類的printMN()範例方法:

// Create an  instance of  Main class  and
// store its  reference in mt reference variable
Main mt = new Main();

// Invoke  the   printMN() instance  method  using the   mt reference variable 
mt.printMN();

要呼叫類方法,請使用帶有名稱的點(.)表示法。下面的程式碼呼叫Main類的printM()類方法:

// Invoke  the   printM() class  method
Main.printM();

屬於一個類的屬性也屬於該類的所有範例。因此也可以使用該類的範例的參照來呼叫類方法。

Main mt = new Main();
mt.printM(); // Call the   class method  using an  instance mt

使用類名呼叫類方法比使用範例參照更直觀。