java类的实例化顺序
父类:
public class A {
public static String a=printStr("父类的静态变量");
public String s = printStr("父类的非静态变量");
static {
printStr("父类的静态块");
}
{
printStr("父类的非静态块");
}
public A(){
printStr("父类构造方法");
}
public static String printStr(String str){
System.out.println(str);
return str;
}
}
子类:
public class B extends A {
public static String b=printStr("子类的静态变量");
public String st = printStr("子类的非静态变量");
static {
printStr("子类的静态块");
}
{
printStr("子类的非静态块");
}
public B(){
printStr("子类的构造方法");
}
//main
public static void main(String[] args) {
new B();
}
}
运行结果:
父类的静态变量
父类的静态块
子类的静态变量
子类的静态块
父类的非静态变量
父类的非静态块
父类构造方法
子类的非静态变量
子类的非静态块
子类的构造方法
总结:先父后子,先静态后非静态,最后执行构造方法