父类静态代码块>子类静态代码块>父类非静态代码块/构造代码块>子类非静态代码块/构造代码块>父类构造函数>子类构造函数
public class Parent {
static String p ="Parent静态常量";
public Parent() {
System.out.println("Parent构造方法");
}
public Parent(String s){
System.out.println("Parent有参构造方法");
}
static{
System.out.println("Parent静态代码块");
}
{
System.out.println("Parent非静态代码块/构造代码块");
}
}
public class Son extends Parent{
static String s = "Son静态常量";
public Son(){
System.out.println("Son构造方法");
}
public Son(String s){
super(s);
System.out.println("Son有参构造方法");
}
static {
System.out.println("Son静态代码块");
}
{
System.out.println("Son非静态代码块/构造代码块");
}
}
public static void main(String[] args) {
System.out.println(Parent.p);
System.out.println(Son.s);
Son son = new Son();
System.out.println("开始");
}
先输出父类静态常量,则父类静态常量在子类静态代码块之前
若后输出父类静态常量,则父类静态常量在子类静态代码块->子类静态常量之后
public static void main(String[] args) {
System.out.println(Son.s);
System.out.println(Parent.p);
Son son = new Son();
System.out.println("开始");
}
执行有参构造方法,父类构造代码块->父类有参构造方法->子类构造代码块->子类有参构造方法
public static void main(String[] args) {
System.out.println(Son.s);
System.out.println(Parent.p);
Son son = new Son();
new Son("s");
System.out.println("开始");
}