Java類初始化順序
阿新 • • 發佈:2022-02-11
目錄
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利
一個類中包含如下幾類東西,他們前後是有順序關係的
- 靜態屬性:static 開頭定義的屬性
- 靜態方法塊: static {} 圈起來的方法塊
- 普通屬性: 未帶static定義的屬性
- 普通方法塊: {} 圈起來的方法塊
- 建構函式: 類名相同的方法
- 方法: 普通方法
初始化順序
public class LifeCycle { // 1.靜態屬性 private static String staticField = getStaticField(); // 2.靜態方法塊 static { System.out.println(staticField); System.out.println("靜態方法塊初始化"); System.out.println("Static Patch Initial"); } // 3.普通屬性 private String field = getField(); // 4.普通方法塊 { System.out.println(field); System.out.println("普通方法塊初始化"); System.out.println("Field Patch Initial"); } // 5.建構函式 public LifeCycle() { System.out.println("建構函式初始化"); System.out.println("Structure Initial "); } public static String getStaticField() { String statiFiled = "Static Field Initial"; System.out.println("靜態屬性初始化"); return statiFiled; } public static String getField() { String filed = "Field Initial"; System.out.println("普通屬性初始化"); return filed; } // 測試 public static void main(String[] argc) { new LifeCycle(); } }
執行結果:
靜態屬性初始化
Static Field Initial
靜態方法塊初始化
Static Patch Initial
普通屬性初始化
Field Initial
普通方法塊初始化
Field Patch Initial
建構函式初始化
Structure Initial
總結:
普通類:
- 靜態變數
- 靜態程式碼塊
- 普通變數
- 普通程式碼塊
- 建構函式
包含繼承關係的父子類:
- 父類靜態變數
- 父類靜態程式碼塊
- 子類靜態變數
- 子類靜態程式碼塊
- 父類普通變數
- 父類普通程式碼塊
- 父類建構函式
- 子類普通變數
- 子類普通程式碼塊
- 子類建構函式
抽象的實現子類: 介面 - 抽象類 - 實現子類
- 介面靜態變數
- 抽象類靜態變數
- 抽象類靜態程式碼塊
- 實現類靜態變數
- 實習類靜態程式碼塊
- 抽象類普通變數
- 抽象類普通程式碼塊
- 抽象類建構函式
- 實現類普通變數
- 實現類普通程式碼塊
- 實現類建構函式
介面注意:
- 宣告的變數都是靜態變數並且是final的,所以子類無法修改,並且是固定值不會因為例項而變化
- 介面中能有靜態方法,不能有普通方法,普通方法需要用defalut新增預設實現
- 介面中的變數必須例項化
- 介面中沒有靜態程式碼塊、普通變數、普通程式碼塊、建構函式