初始化顺序:
java类成员初始化顺序可以简单记为:
父子父父子子
含义是:
父类静态块
子类静态块
父类实例块
父类构造方法
子类实例块
子类构造方法
示例代码:
package a;
class Father{
/**
* 静态块
* */
static {
System.out.println("这是父类静态块");
}
/**
* 实例块
* */
{
System.out.println("这是父类普通块");
}
/**
* 构造方法
* */
public Father() {
System.out.println("这是父类构造方法");
}
}
class Son extends Father{
/**
* 静态块
* */
static {
System.out.println("这是子类静态块");
}
/**
* 实例块
* */
{
System.out.println("这是子类普通块");
}
/**
* 构造方法
* */
public Son() {
System.out.println("这是子类构造方法");
}
}
public class Hello {
public static void main(String[] args) {
Son son=new Son();
}
}
运行结果:
结果不出所料:
这是父类静态块
这是子类静态块
这是父类普通块
这是父类构造方法
这是子类普通块
这是子类构造方法
多次new 子类对象
在一般的面试题中如果将Son类的构造方法调用两次或者更多次会怎么样?
现在将main()方法改为:
public static void main(String[] args) {
Son son=new Son();
System.out.println("-------------------------------");
Son son1=new Son();
}
会输出什么样的结果?
答:
输出的结果为
这是父类静态块
这是子类静态块
这是父类普通块
这是父类构造方法
这是子类普通块
这是子类构造方法
-------------------------------
这是父类普通块
这是父类构造方法
这是子类普通块
这是子类构造方法
可以看到第二次new 一个son对象的时候没有调用静态块的方法。
这是因为在第二次调用的时候静态方法已经加载到内存里,不会再次调用。