Fork me on GitHub

综合: Java 对象初始化过程

class Fu
{
    Fu()
    {
        show();
    }
    void show()
    {
        System.out.println("xixi");
    }
}

class Zi extends Fu
{
    int num = 9;

    // 构造代码块
    {
        System.out.println("constructor code..." + num);
        num = 10;
    }

    // 构造函数
    Zi()
    {
        super();
        // 显示初始化
        // 构造代码块初始化
        System.out.println("zi constructor..." + num);
    }

    void show()
    {
        System.out.println("show..." + num);
    }
}

class Test
{
    public static void main(String[] args)
    {
        new Zi();
    }
}

// 输出结果:
// show...0
// constructor code...9
// zi constructor...10

流程如下图所示:

// 示例二:
class A {

    static {
        System.out.print("1");
    }

    public A() {
        System.out.print("2");
    }
}

class B extends A{

    static {
        System.out.print("a");
    }

    public B() {
        System.out.print("b");
    }
}

public class Hello {

    public static void main(String[] args) {
        A ab = new B();
        ab = new B();
    }

}

// 执行结果: 1a2b2b
// 创建对象时构造器的调用顺序是:先初始化静态成员,然后调用父类构造器,再初始化非静态成员,最后调用自身构造器。


_参考资料_ - [JavaSE 基础视频](https://www.bilibili.com/video/av3096713/index_16.html#page=18) - [Java 面试题](http://blog.csdn.net/jackfrued/article/details/44921941)
posted @ 2017-08-28 20:50  小a的软件思考  阅读(149)  评论(0编辑  收藏  举报