jvmクラス初期化プロセスコード実戦分析

2700 ワード

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...
    }
}