一:案例:父类、子类、测试类
1:父类
public class ParentTest {
private static String var1 = initStaticParent();
private String var2 = initStringParent();
static{
System.err.println("父类静态代码块");
}
{
System.err.println("父类构造代码块");
}
public ParentTest(){
System.err.println("父类构造方法");
}
private String initStringParent(){
System.err.println("父类普通方法给变量赋值");
return "initStringParent";
}
private static String initStaticParent(){
System.err.println("父类静态方法给变量赋值");
return "initStringParent";
}
}
2:子类
public class ChildTest extends ParentTest{
static{
System.err.println("子类静态代码块");
}
private static String var1 = initStaticParent();
{
System.err.println("子类构造代码块");
}
private String var2 = initStringParent();
public ChildTest(){
System.err.println("子类构造方法");
}
private String initStringParent(){
System.err.println("子类普通方法给变量赋值");
return "initStringParent";
}
private static String initStaticParent(){
System.err.println("子类静态方法给变量赋值");
return "initStaticParent";
}
}
3:测试类
public class Test1 {
public static void main(String[] args) {
new ChildTest();
}
}
4:测试结果
父类静态方法给变量赋值
父类静态代码块
子类静态代码块
子类静态方法给变量赋值
父类普通方法给变量赋值
父类构造代码块
父类构造方法
子类构造代码块
子类普通方法给变量赋值
子类构造方法
二:结论
加载顺序 :
1)先加载父类的静态代码块和静态变量(谁在前先加载谁)
2)然后加载子类的静态代码块和静态变量(谁在前先加载谁)
3)其次加载父类的普通方法赋值的变量和构造代码块(谁在前先加载谁)
4)然后加载父类的构造方法
5)在然后加载子类的普通方法赋值的变量和构造代码块(谁在前先加载谁)
6)最后加载子类的构造方法