class Person{
{System.out.println("Person类构造代码块");}
static {
System.out.println("Person类静态代码块");
}
public Person(){
System.out.println("Person类构造函数");
}
}
class Demo6
{
public static void main(String[] args) {
show();
}
static Demo6 d = new Demo6();//1
static Person p = new Person();
{System.out.println("main构造代码块加载");}
static{
System.out.println("main函数静态代码块加载");
}//2
Demo6(){
System.out.println("main构造函数运行");
}
public static void show(){
System.out.println("show函数调用");
}
}
现在的代码执行后先输出main函数构造代码块,为何不先加载静态代码块?将2放在1前面就会先加载静态代码块,但是加载类的时候不是优先加载静态代码块吗?将2中的static去掉后又先加载Person类了,并且将1中的static去掉后也是先加载Person类而且只加载main的静态代码块不执行构造代码块了,又是为什么?请大神解疑答惑!