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

使用類名調用類方法比使用實例引用更直觀。