用一个题来讲解一下吧!
public class MyTest234 {
public static void main(String[] args) {
Zi z=new Zi();//请执行结果
}
}
class Fu{
static {
System.out.println("静态代码块Fu");
}
{
System.out.println("构造代码块Fu");
}
public Fu(){
System.out.println("构造方法Fu");
}
}
class Zi extends Fu{
static {
System.out.println("静态代码块Zi");
}
{
System.out.println("构造代码块Zi");
}
public Zi(){
super();
System.out.println("构造方法Zi");
}
}
输出:
解答: 当new子类对象时先父类加载进内存,父类一进内存就先执行静态代码块,父类进完内存后子类也加载进内存,即执行子类的静态代码块。之后本着构造代码块优先于构造代码执行,同时先执行父类的构造方法。