Java 靜態資料初始化的示例程式碼
阿新 • • 發佈:2020-09-16
無論建立多少個物件,靜態資料都只佔用一份儲存區域。static關鍵字不能應用於區域性變數,因此它只能作用於域。如果一個域是靜態的基本型別域,且也沒有對它進行初始化,那麼它就會獲得基本型別的標準初始值;如果它是一個物件引用,那麼它的預設初始值就是null
class Bowl { public Bowl(int marker) { System.out.println("Bowl(" + marker + ")"); } void f1(int marker) { System.out.println("f1(" + marker + ")"); } } class Table { static Bowl bowl = new Bowl(1); public Table() { System.out.println("Table()"); bowl2.f1(1); } void f2(int marker) { System.out.println("f2(" + marker + ")"); } static Bowl bowl2 = new Bowl(2); } class Cupboard { Bowl bowl3 = new Bowl(3); static Bowl bowl4 = new Bowl(4); public Cupboard() { System.out.println("Cupboard()"); } void f3(int marker) { System.out.println("f3(" + marker + ")"); } static Bowl bowl5 = new Bowl(5); } public class StaticInit { public static void main(String[] args) { //第三步 System.out.println("Creating new Cupboard in main"); //第四步 //因為Cupboard內的靜態變數已經初始化完成,所以不再初始化(無論建立多少個物件,靜態資料都是隻佔用一份儲存區域) //但是裡邊的類成員變數 bowl3 還是需要進行二次初始化的,因為你這是new物件,所以列印 Bowl(3) //然後呼叫該物件的無參建構函式,列印 Cupboard() new Cupboard(); //第五步 System.out.println("Creating new Cupboard in main"); //第六步 //和第四步一樣,執行初始化,列印 Bowl(3),然後呼叫無參建構函式,列印 Cupboard() new Cupboard(); //第七步 table.f2(111); //第八步 cupboard.f3(111); } //Java 資料型別、物件引用 和 構造器 之間的初始化順序 https://www.sunjs.com/article/detail/debedcef327c4872933e0b2f1ac7cb71.html //第1步: //先初始化靜態程式碼塊、 //Table 類中也含有靜態引用變數,所以先去執行bowl引用指向的物件的建立,所以先列印 Bowl(1) //然後該類中還有一個靜態物件,所以立即去初始化這個靜態物件,然後列印 Bowl(2) //執行完成以後,正式建立物件,執行Table類的預設無參建構函式,列印 Table() //建構函式內 又使用靜態變數bowl2 呼叫了其物件內的方法,所以列印 f1(1) //到此這一行程式碼執行的初始化全部執行完畢 static Table table = new Table(); //第2步: //初始化 Cupboard 類,因為 Cupboard 類中也含有兩個靜態物件,所以依次執行 Bowl(4) 和 Bowl(5) //在執行Cupboard建構函式之前先執行變數初始化的規則,所以 bowl3 先執行,列印 Bolw(3) //然後執行無參建構函式,列印 Cupboard() //到此,這行程式碼的初始化全部執行完畢 static Cupboard cupboard = new Cupboard(); }
執行結果:
Bowl(1)
Bowl(2)
Table()
f1(1)
Bowl(4)
Bowl(5)
Bowl(3)
Cupboard()
Creating new Cupboard in main
Bowl(3)
Cupboard()
Creating new Cupboard in main
Bowl(3)
Cupboard()
f2(111)
f3(111)
以上就是Java 靜態資料初始化的示例程式碼的詳細內容,更多關於Java 靜態資料初始化的資料請關注我們其它相關文章!