1.代码块、静态代码块、构造函数的调用顺序
public class Apple {
Apple(){
System.out.println("Apple构造函数");
}
void play(){
System.out.println("apple");
}
{
System.out.println("first");
}
static {
System.out.println("second");
}
}
class Fruit extends Apple {
Fruit(){
System.out.println("Fruit构造函数");
}
void play(){
System.out.println("fruit");
}
void get(){
System.out.println("get");
}
{
System.out.println("third");
}
static {
Fruit f = new Fruit();
System.out.println("four");
}
public static void main(String[] args) {
Fruit fruit = new Fruit();
}
}
输出:
second
first
Apple构造函数
third
Fruit构造函数
four
first
Apple构造函数
third
Fruit构造函数
即:
静态代码块(先父类后子类)(仅初始化一次)->父类代码块->父类构造函数->子类代码块->子类构造函数
注:代码块在每次创建对象时都会创建,因此不能在代码块中进行对象创建,否则会出现死循环