java中的static修飾符
阿新 • • 發佈:2018-12-13
static的基本作用是: 方便在沒有建立物件的時候呼叫(屬性/方法)
先看一道例題: Math類中定義常量PI並賦值,定義方法pi()輸出π
public class Math {
public final double PI = 3.1415926;
public void pi(){System.out.println("3.1416926"); }
}
這時候主函式想要呼叫Math類中的屬性或方法,首先要例項化一個該類物件來產生例項域中的值,並用物件調取例項域中的值。
public static void main(String[] args) { Math math = new Math(); System.out.println(math.PI); math.pi();}
而用static修飾屬性/方法,這時會為給屬性/設定一個靜態域來存放其值。這個靜態域又叫類域,屬於類當類建立時自動產生,而與物件無關。
public class Math {
public static final double PI = 3.1415926;}
此時可以直接用類名呼叫屬性的值。
public static void main(String[] args) {
System.out.println(Math.PI);
Math.pi();}
有了這個例子我們就很好理解: 對於常量而言,static只有一個副本只會在類首次載入的時候初始化 省略static後每一個物件都會有該變數的拷貝。
對於方法而言,可以認為static是沒有this引數(隱式引數)的方法。這下我們也就知道了為什麼main方法中有static,因為我們是執行main方法的時候並沒有建立物件,因此我們只能用類名來呼叫。
注意 1.在靜態方法中不能訪問類的非靜態成員變數和方法即(靜態只能呼叫靜態) 2.static不支援來修飾區域性變數(區域性變數有生命週期,執行完後java無法自動回收記憶體)