1. 程式人生 > >java-類生命周期(二)

java-類生命周期(二)

.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-類生命周期(二)