類可以有兩種型別的方法:範例方法和類方法。 範例方法和類方法也分別稱為類的非靜態方法和靜態方法。
範例方法用於實現類的範例的行為。 範例方法只能在類的範例的上下文中呼叫。類方法用於實現類本身的行為。類方法可在類的上下文中執行。
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
使用類名呼叫類方法比使用範例參照更直觀。