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

流程如下图所示:

综合: Java 对象初始化过程

// 示例二:
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)

相关文章:

  • 2021-08-09
  • 2021-06-15
  • 2021-12-20
  • 2022-01-22
  • 2022-12-23
  • 2022-01-22
猜你喜欢
  • 2021-09-10
  • 2022-03-04
  • 2021-09-21
  • 2021-12-01
  • 2021-04-08
  • 2021-12-01
  • 2021-09-26
相关资源
相似解决方案