jvm 類初始化過程程式碼實戰分析

Coding-lover發表於2015-10-17
package com.unilay;
/**
 * @author YangYuzhong
 * @since Oct 17, 2015 9:43:48 PM
 */
public class Main {

    static int staticVar;// 1.準備階段-->0

    static final int int CONTANT_VALUE = 20;// 2.準備階段-->20

    static {
        staticVar = 50;// 4.初始化階段-->50
    }

    int var = 3;// 7.賦初值-->0
    {
        var = 5;// 9.初始化塊-->5
    }

    public Main() {
        var = 7;// 10.構造器-->7
    }

    static class ExtendMain extends Main {

        static int secondStaticVar;// 3.準備階段-->0
        int sencondVar = 50; // 8.賦初值-->0 11.初始化快-->50
        static {
            Main.staticVar = 150;// 5.初始化階段-->150
        }

        public ExtendMain() {
            var = 17; // 13.構造器-->17
        }
        {
            var = 10; // 12.初始化快-->10
        }
    }

    public static void main(String[] args) {
        Main main = new ExtendMain(); // 6.new命令 // 14.new返回
        System.out.println(main.var);// 15...
    }
}


相關文章