static、构造器、代码块加载顺序
首先看看代码加结果
package com.tc.test;
public class Father {
private int i = test();
private static int j = method();
static {
System.out.println("父类-静态块 = 1");
}
public Father() {
System.out.println("父类-构造器 = 2");
}
{
System.out.println("父类-代码块 = 3");
}
private int test() {
System.out.println("父类-成员方法 test() = 4");
return 0;
}
private static int method() {
System.out.println("父类-类方法 method() = 5");
return 0;
}
}
package com.tc.test;
public class Son extends Father {
private int i = test();
private static int j = method();
static {
System.out.println("子类-静态块 = 6");
}
public Son() {
System.out.println("子类-构造器 = 7");
}
{
System.out.println("子类-代码块 = 8");
}
private int test() {
System.out.println("子类-成员方法 test() = 9");
return 0;
}
private static int method() {
System.out.println("子类-类方法 method() = 10");
return 0;
}
}
package com.tc.test;
import org.junit.Test;
public class Test001 {
@Test
public void test01(){
Son s1 = new Son();
System.out.println("-------------");
Son s2 = new Son();
System.out.println("-------------");
Father f1 = new Father();
}
}

总结:
1.static修饰的静态优先加载
2.父类优先子类加载
3.代码块优先构造器加载
4.static只加载一次

浙公网安备 33010602011771号