1. 程式人生 > 其它 >類初始化和示例初始化

類初始化和示例初始化

類初始化過程 1、一個類要建立例項需要先載入並初始化該類
     main方法所在的類需要先載入和初始化
2、一個子類要初始化需要先初始化父類 3、一個類初始化就是執行<clinit>()方法
     <clinit>()方法由靜態類變數顯示賦值程式碼和靜態程式碼塊組成      類變數顯示賦值程式碼和靜態程式碼塊程式碼從上到下順序執行      <clinit>()方法只執行一次 例項初始化過程 1、例項初始化就是執行<init>()方法      <init>()方法可能過載有多個,有幾個構造器就有幾個<init>方法
     <init>()方法由非靜態例項變數顯示賦值程式碼和非靜態程式碼塊、對應構造器程式碼組成      非靜態例項變數顯示賦值程式碼和非靜態程式碼塊程式碼從上到下順序執行,而對應構造器的程式碼最後執行
     每次建立例項物件,呼叫對應構造器,執行的就是對應的<init>方法
     <init>方法的首行是super()或super(實參列表),即對應父類的<init>方法 方法的重寫Override   1、哪些方法不可以被重寫
     final方法
     靜態方法
     private等子類中不可見方法   2、物件的多型性
     子類如果重寫了父類的方法,通過子類物件呼叫的一定是子類重寫過的程式碼      非靜態方法預設的呼叫物件是this
     his物件在構造器或者說<init>方法中就是正在建立

Override重寫的要求
  • 方法名(相同)
  • 形參列表(相同)
  • 返回值型別(相同)
  • 丟擲的異常列表(重寫方法不能丟擲新的異常,或者超過了父類範圍的異常,但是可以丟擲更少、更有限的異常,或者不丟擲異常)
  • 修飾符(不能縮小訪問許可權)
Override重寫與Overload過載的區別
區別點 過載方法 重寫方法
引數列表 必須修改 一定不能修改
返回型別 可以修改 一定不能修改
異常 可以修改 可以減少或刪除,一定不能丟擲新的或者更廣的異常
訪問 可以修改 一定不能做更嚴格的限制(可以降低限制)

方法的重寫(Overriding)和過載(Overloading)是java多型性的不同表現,重寫是父類與子類之間多型性的一種表現,過載可以理解成多型的具體表現形式。

  • (1)方法過載是一個類中定義了多個方法名相同,而他們的引數的數量不同或數量相同而型別和次序不同,則稱為方法的過載(Overloading)。
  • (2)方法重寫是在子類存在方法與父類的方法的名字相同,而且引數的個數與型別一樣,返回值也一樣的方法,就稱為重寫(Overriding)。
  • (3)方法過載是一個類的多型性表現,而方法重寫是子類與父類的一種多型性表現。