类加载顺序
1、加载父类中的静态代码块
2、加载子类中的静态代码块
3、加载父类中的普通代码块
4、加载父类中的构造方法
5、加载子类中的普通代码块
6、加载子类中的构造方法
静态代码块优先被加载(先加载父类,后加载子类)
父类中普通代码块和构造方法(父类先加载,父类中普通代码块先加载,最后再加载构造方法(任何时候构造方法都是最后加载的))
子类中普通代码块和构造方法
代码实例
public class SuperClass {
public static String str1="F----这是父类的静态变量111111";
public static void method2(){
System.out.println("F----这是父类的静态方法222222");
}
static {
System.out.println("F----这是父类的静态代码块");
}
public static void method4(){
System.out.println("F----这是父类的普通方法444444");
}
{
System.out.println("F----这是父类的普通代码块");
}
public static String str2="F----这是父类的静态变量222222";
public static void method1(){
System.out.println("F----这是父类的静态方法111111");
}
public SuperClass(){
System.out.println("F----这是父类的构造方法");
}
public static void method3(){
System.out.println("F----这是父类的普通方法333333");
}
}
public class SonClass extends SuperClass{
public static String str7="S----这是子类的静态变量777777";
public static void method2(){
System.out.println("S----这是子类的静态方法222222");
}
static {
System.out.println("S----这是子类的静态代码块");
}
public static String str8="S----这是子类的静态变量888888";
{
System.out.println("S----这是子类的普通代码块111111");
}
public static void method1(){
System.out.println("S----这是子类的静态方法1111111");
}
{
System.out.println("S----这是子类的普通代码块222222");
}
public void method6(){
System.out.println("S----这是子类的普通方法666666");
}
public SonClass(){
System.out.println("S----这是子类的构造方法");
}
}
public class Test {
public static void main(String[] args) {
SonClass sonClass=new SonClass();
}
}
执行结果:
F----这是父类的静态代码块
S----这是子类的静态代码块
F----这是父类的普通代码块111111
F----这是父类的普通代码块222222
F----这是父类的构造方法
S----这是子类的普通代码块111111
S----这是子类的普通代码块222222
S----这是子类的构造方法