1. 程式人生 > >JAVA課程課後作業03之動手動腦

JAVA課程課後作業03之動手動腦

一.建構函式

問題一:

    錯誤程式碼如圖:

  

  錯誤原因:從圖片中的編譯報錯的地方來看,程式是在給新的物件分配空間是出現了問題,因而我們往下觀察Foo類,Foo類的構造方法是有一個引數的有參方法,而前面構造新的物件的時候卻沒有新增引數,所以報錯

問題二:這是一個生造出來展示Java語法特性的示例類,如果一個類中既有初始化塊,又有構造方法,同時還設定了欄位的初始值,誰說了算?

  結果:我們按照圖片中的程式碼演示了一遍,發現在第一次無引數的初始化時,輸出的結果是100,而當第二次有引數的初始化的時候卻是300.

             我在每行後面添加了輸出語句,發現在程式中,field=200是最先執行的語句,其次執行的是建構函式。

  類欄位的初始化順序:

             1.執行類成員定義時指定的預設值或類的初始化塊,到底執行哪一個要看哪一個“排在前面”。

     2.執行類的建構函式。

 二.類的靜態初始化模組

   TestStaticInitializeBlock.java的輸出結果為:

  Root的靜態初始化塊
  Mid的靜態初始化塊
  Leaf的靜態初始化塊
  Root的普通初始化塊
  Root的無引數的構造器
  Mid的普通初始化塊
  Mid的無引數的構造器
  Mid的帶引數構造器,其引數值:Java初始化順序演示
  Leaf的普通初始化塊
  執行Leaf的構造器

  由輸出的結果顯示:

  1.靜態初始化塊會被首先執行,而當建立子型別的物件時,也會導致父型別的靜態初始化塊的執行。

  2.靜態初始化塊只執行一次。

三.靜態方法中只允許訪問靜態資料,那麼,如何在靜態方法中訪問類的例項成員(即沒有附加static關鍵字的欄位或方法)?

解決方案(參考網路方法):首先new一個物件,然後將物件的成員資料賦值給類中的靜態資料成員,最後再用靜態成員方法將靜態成員資料輸出來達到訪問例項成員的目的。