java-類生命周期(二)
阿新 • • 發佈:2017-06-27
.net ava 初始化 啟動 pri pos 入口 原理 tails
求運行結果。
上文介紹了java-類生命周期(一),理論性比較強。認為太復雜的同學,瞟一下本文的樣例加深理解。
先給道題目,看看答對沒。
/** * 類載入試驗基類 * * @author peter_wang * @create-time 2014-5-14 上午8:41:23 */ public class SuperClass { static { System.out.println("call super static method!"); } private SuperHelpClass mSuperSuperClass = new SuperHelpClass(); public SuperClass() { System.out.println("call super constructor"); } public SuperClass(int flag) { System.out.println("call super constructor " + flag); } }
/** * 類載入試驗子類 * * @author peter_wang * @create-time 2014-5-14 上午8:43:07 */ public class SubClass extends SuperClass { private SuperClass mSuperClassFirst = new SuperClass(1); public SubClass() { System.out.println("call sub constructor"); } /** * @param args */ public static void main(String[] args) { SubClass subClass = new SubClass(); } static { System.out.println("call sub static method!"); } private static SuperClass mSuperClassSecond = new SuperClass(2); }
求運行結果。
原理剖析:
1.啟動JVM,運行SubClass的入口main方法。意外發現類沒載入,遂用ClassLoader載入.class文件
2.載入完SubClass,運行main之前須要先運行靜態塊,再運行靜態域
3.父類優先於子類運行
4.運行main方法中的new SubClass(),運行父類全部變量初始化,再運行父類構造器
5.運行子類全部變量初始化,最後運行子類構造器
運行結果:
call super static method! call sub static method! call super constructor 2 call super constructor call super constructor 1 call sub constructor
java-類生命周期(二)