综合: 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)