先说结论: static代码块 === > 普通代码块 === > 构造方法
说明: static代码块只会在类加载进内存时执行一次,其他两种在每次new时都会执行一次
public class Test{
//静态代码快
static {
System.out.println("A");
}
//普通代码快
{
System.out.println("B");
}
//构造方法
Test(){
System.out.println("C");
}
public static void main(String[] args) {
System.out.println("D");
new Test();
new Test();
}
}
输出结果为:
A
D
B
C
B
C
+++++++++++++++++++++++++++++++++++分割线+++++++++++++++++++++++++++++++++++
如果这时候Test继承了一个类,回显加载子类还是父类呢?
class Person{
Person(){
System.out.println("E");
}
}
public class Test{
//静态代码快
static {
System.out.println("A");
}
//普通代码快
{
System.out.println("B");
}
//构造方法
Test(){
System.out.println("C");
}
public static void main(String[] args) {
System.out.println("D");
new Test();
new Test();
}
}
输出结果为:
A
D
E
B
C
E
B
C
所以类加载的时候是会先加载父类。