类的加载顺序.
public class Child extends father {
private String child = method();
private static String staticChild = staticMethod();
{
System.out.println("子类普通代码块");
}
public Child() {
System.out.println("子类构造器");
}
public static void main(String[] args) {
System.out.println("===================子类main方法入口==================");
new Child();
}
static {
System.out.println("子类静态代码块");
}
public static String staticMethod() {
System.out.println("子类的静态成员变量");
return "子类静态方法调用";
}
public String method(){
System.out.println("子类的普通成员变量");
return "子类方法调用";
}
}
class father extends Root{
static {
System.out.println("父类静态代码块");
}
{
System.out.println("父类普通代码块");
}
private String father = method();
private static String staticFather = staticMethod();
public father() {
System.out.println("父类构造器");
}
public static String staticMethod() {
System.out.println("父类的静态成员变量");
return "父类静态方法调用";
}
public String method(){
System.out.println("父类的普通成员变量");
return "父类方法调用";
}
}
class Root{
private String root = method();
private static String staticRoot = staticMethod();
static {
System.out.println("Root类静态代码块");
}
{
System.out.println("Root类普通代码块");
}
public Root() {
System.out.println("Root类构造器");
}
public static String staticMethod() {
System.out.println("Root类的静态成员变量");
return "Root类静态方法调用";
}
public String method(){
System.out.println("Root类的普通成员变量");
return "Root类方法调用";
}
}
Root类的静态成员变量
Root类静态代码块
父类静态代码块
父类的静态成员变量
子类的静态成员变量
子类静态代码块
===================子类main方法入口==================
子类的普通成员变量
Root类普通代码块
Root类构造器
父类普通代码块
子类的普通成员变量
父类构造器
子类的普通成员变量
子类普通代码块
子类构造器
由父及子,静态先行(静态代码块和静态变量看顺序)