金蝶筆試之------》 類初始化過程

Clinit

一個類要創建實例需要先加載並初始化該類

main方法所在的類需要先加載和初始化

一個子類要初始化需要先初始化父類

一個類初始化就是執行clinit()方法

clinit() 方法由靜態類變量顯示賦值代碼和靜態代碼塊組成

類變量顯示賦值代碼和靜態代碼塊代碼從上到下順序執行
()方法只執行一次

父類靜態常量==》父類靜態代碼塊==》子類靜態常量==》子類靜態代碼塊

init

init()方法可能重載有多個,有幾個構造器就有幾個init方法

init()方法由非靜態實例變量顯示賦值代碼和非靜態代碼塊組成

非靜態實例變量顯示賦值代碼和非靜態代碼塊從上往下順序執行

每次創建實例對象,調用對應構造器,執行的就是對應的init()方法

init 方法的首行是supper() 或者supper(實參列表),即對應父類的init()方法

package com.evan.springboot.study;

/**
 * @author evanYang
 * @version 1.0
 * @date 2020/05/24 21:52
 */
public class Father {
    private int i=test();
    private static int j=method();

    private int test() {
        System.out.println("4");
        return 1;
    }


    private static int method() {
        System.out.println("5");
        return 1;
    }

    static {
        System.out.println("Father Static 1");
    }

    Father(){
        System.out.println("Father Constructor 2");
    }

    {
        System.out.println("代碼塊 3");
    }


}

package com.evan.springboot.study;

/**
 * @author evanYang
 * @version 1.0
 * @date 2020/05/24 21:55
 */
public class Son extends Father {
    private int i=test();
    private static int j=method();

    private int test() {
        System.out.println("9");
        return 1;
    }


    private static int method() {
        System.out.println("10");
        return 1;
    }

    static {
        System.out.println("Son Static 6");
    }

    Son(){
        System.out.println("Son Constructor 7");
    }

    {
        System.out.println("代碼塊 8");
    }

    public static void main(String[] args) {
        Son son = new Son();
    }
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章