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
使用類名調用類方法比使用實例引用更直觀。