java面試題 類初始化 和實例初始化


以上運行結果      (5) (1) (10) (6)  (9) (3) (2) (9) (8)(7)   

                                                                         (9) (3) (2) (9) (8)(7) 

 

  1. 解析   考點
  •  類初始化過程 
  •  一個類要創建實例 應先初始化該類   main方法為所在的類需要先加載和初始化
  •  類初始化需要先初始化父類
  •  類初始化就是執行<clinit>()方法
  •  <clinit>()方法由 靜態類變量顯示賦值代碼(如圖中  private static int j=method() )和靜態代碼塊組成
  •  靜態類變量賦值代碼和靜態代碼塊從上到下順序執行
  •  <clinit>()方法只執行一次

   所以如果main方法中為空的話也會默認初始化son類  即只進行類初始化

  則此時結果是   (5)(1) (10)(6)

  •  實例初始化過程
  • 實例初始化就是執行<init>()方法
  • <init>() 方法可能重載有多個   有幾個構造器就有幾個<init>方法
  • <init>()方法由非靜態實例變量顯示賦值代碼和非靜態代碼塊  ,對應構造器組成
  • 非靜態實例變量顯示賦值代碼和非靜態代碼塊從上到下順序執行  ,構造器的代碼最后執行
  • 每次創建實例對象   調用對應構造器  執行的就是對應的<init>方法
  • <init>方法的首行是super()或super(實參列表) 及對應父類的init() 方法
  • 所以  子類實例初始化的時候  super()先執行  則父類調用  test()方法時  非靜態方法前面有一個默認對象this     this在構造器 或<init>表示正在創建的對象   因為這里是在創建son對象 所以test()執行的是子類重寫的代碼(面向對象多態   編譯看左邊 運行看右邊)輸出(9)

  子類無參構造最后執行

擴展  父類那些方法不可以被重寫

     final  方法    

     靜態方法

     private等子類中不可見的方法

對象的多態性

    子類如果重寫了父類中的方法   通過子類對象調用的一定是子類重寫的方法

     非靜態方法默認的調用對象是this

     this對象在構造器或者說<init>方法中就是正在創建的對象

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM