1. 程式人生 > 其它 >Java類初始化順序

Java類初始化順序

目錄

一個類中包含如下幾類東西,他們前後是有順序關係的

  1. 靜態屬性:static 開頭定義的屬性
  2. 靜態方法塊: static {} 圈起來的方法塊
  3. 普通屬性: 未帶static定義的屬性
  4. 普通方法塊: {} 圈起來的方法塊
  5. 建構函式: 類名相同的方法
  6. 方法: 普通方法

初始化順序

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新增預設實現
  • 介面中的變數必須例項化
  • 介面中沒有靜態程式碼塊、普通變數、普通程式碼塊、建構函式
作者:黃河大道東 出處:https://home.cnblogs.com/u/hhddd-1024
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利