java-类生命周期(二)

来源:互联网 发布:手机淘宝充值平台 编辑:程序博客网 时间:2024/05/21 17:47

上文介绍了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 2call super constructorcall super constructor 1call sub constructor


1 0