Java父子类加载顺序
结论:父类静态成员变量 > 父类静态代码块 > 子类静态成员变量 > 子类静态代码块 > 父类非静态成员变量 > 父类非静态代码块 > 父类构造函数 > 子类非静态成员变量 > 子类非静态代码块 > 子类构造函数;子类和父类的静态方法和非静态方法只有在被调用时才会加载。
父类代码:
public class Fater {
static Output output = new Output("父类静态成员变量");
Output output1 = new Output("父类非静态成员变量");
static {
System.out.println("父类静态代码块");
}
{
System.out.println("父类非静态代码块");
}
public Fater() {
System.out.println("父类构造函数");
}
public static void method() {
System.out.println("父类类静态方法");
}
public void method1() {
System.out.println("父类类非静态方法");
}
}
子类代码:
public class Son extends Fater {
static Output output = new Output("子类静态成员变量");
Output output1 = new Output("子类非静态成员变量");
static {
System.out.println("子类静态代码块");
}
{
System.out.println("子类非静态代码块");
}
public Son() {
System.out.println("子类构造函数");
}
public static void method() {
System.out.println("子类静态方法");
}
public void method1() {
System.out.println("子类非静态方法");
}
}
成员变量类:
public class Output {
public Output(String str) {
System.out.println(str);
}
}
测试输出:
public class Demo1 {
public static void main(String[] args) {
Son son = new Son();
}
}