1. 程式人生 > 其它 >Java關鍵字-static彙總

Java關鍵字-static彙總

1.靜態變數(被static修飾的成員變數)

1-靜態變數

  1. 執行時,Java虛擬機器只為靜態變數分配一次記憶體(載入類的過程中完成靜態變數的記憶體分配)
  2. 類的內部可以在任何方法內直接訪問靜態變數
  3. 其他類中可通過類名訪問該類中的靜態變數 Class.staticVal

2-例項變數

  1. 每建立一個例項,Java虛擬機器就會為例項變數分配一次記憶體
  2. 類的內部,可以在非靜態方法中直接訪問例項變數
  3. 類內部的靜態方法其他類中則需要通過類的例項物件進行訪問。 class.val

3-靜態變數在類中的作用

  1. 靜態變數可被類的所有例項共享。(增加例項之間的互動性)
  2. 若所有類的例項均包含一個相同的常量屬性,則可將其定義為靜態變數而節省記憶體空間。(圓周率)

2.靜態方法(被static修飾的方法)

靜態方法與例項方法區別
  1. 靜態方法不需要通過其所屬的類的例項即可呼叫(Class.method()),因此靜態方法中不能使用this與super關鍵字(其都與類的例項相關),也不可直接訪問所屬類的例項變數和例項方法。但可以訪問所屬類的靜態變數和靜態方法。
  2. 例項方法中可直接訪問所屬類的靜態變數,靜態方法,例項變數和例項方法。

3.靜態程式碼塊

用法:

靜態程式碼塊指Java類中的static{}程式碼塊,主要用於初始化類,為類的靜態變數賦予初始值(提升程式效能)

static {
    a = 33;
    message = "Hello World";
}
特點:
  1. 靜態程式碼塊類似於一個方法,但不可存在於任何方法體中。
  2. 靜態程式碼塊可置於類中任何地方,類中可以有多個靜態程式碼塊。
  3. JVM在載入類時執行靜態程式碼塊(將只執行一次的初始化操作置於靜態程式碼塊中)
  4. 若類中含多個靜態程式碼塊,則JVM按其出現次序依次執行且每個只被執行依次。
  5. 同靜態方法一樣不可直接訪問類的例項變數和例項方法,需通過類的例項物件來訪問。

注: 將static除去即為非靜態程式碼塊,其僅在建立物件時自動執行的程式碼。建立物件時先執行靜態程式碼塊再執行非靜態程式碼塊。

4.靜態匯入

匯入方法
  1. 匯入指定類的全部靜態成員變數、方法
    import static java.lang.Math.*;
  2. 匯入指定類的單個靜態成員變數、方法
    import static java.lang.Math.fieldName|mathodName;

匯入後使用靜態成員變數或方法時不需使用Class.method(),可直接使用method()。

5.靜態內部類(static修飾的內部類)

例項程式碼
public class Outer {
    static class Inner {
        // 靜態內部類
    }
}
特點:
  1. 建立靜態內部類的例項時不需建立外部類的例項
    Outter.Inner inner = new Outer.Inner();
  2. 靜態內部類可以定義靜態成員和例項成員。外部類以外其他類需通過完成類名訪問靜態內部類中靜態成員int b2 = Outer.Inner.b;,訪問例項成員需通過靜態內部類的例項來訪問。
  3. 靜態內部類可以直接訪問外部類的靜態成員,需通過外部類的例項訪問外部類的例項成員。

不積跬步,無以至千里.不積小流,無以成江海。