最近在牛客网上刷到这题,特此记录下静态代码块及代码块的执行顺序
class X{ //父类
Y y=new Y();
public X(){
System.out.println("new X");
}
static {
System.out.println("static X");
}
{
System.out.println("block X");
}
}
class Y{
public Y(){
System.out.println("new Y");
}
{
System.out.println("block Y");
}
}
public class Z extends X{//子类
Y y=new Y();
static X x=new X();
public Z(){
System.out.println("new Z");
}
public static void main(String[] args) {//main方法
new Z();
}
static {
System.out.println("static Z");
}
{
System.out.println("block Z");
}
}
结果如下
static X
block Y
new Y
block X
new X
static Z
block Y
new Y
block X
new X
block Y
new Y
block Z
new Z
最终得出结论:
——>父类静态代码块==new静态
——>子类静态代码块==new静态
——>父类代码块==new
——>父类构造方法
——>子类代码块==new
——>子类构造方法