首先,毫无置疑的,静态代码块在加载时就执行了,所以肯定是最先执行的。。。。
然后Child Child = new Child()时,new Child()时就会创建一个对象了,但是这个对象还不会执行构造方法中的内容,然后带着这个创建的这个对象去执行非静态代码块中的 内容,执行完后,就去执行构造方法中的内容了,重点来了,其实在执行非静态代码块之前,会带着这个对象执行类中的成员变量部分,因为已经有了对象,所以就有了依附于对象的这些属性,那么这时这些属性的初始值就是这些属性的数据类型初始值,如果这些属性被赋值了,然后再被赋值。
public class Fruit {
{
System.out.println("I`m Fruit");
}
public Fruit() {
System.out.println("Hello Fruit");
}
static{
System.out.println("Static Fruit");
}
public static void main(String[] args) {
new Fruit();
}
}
输出结果是:
Static Fruit
I`m Fruit
Hello Fruit
总结:顺序是先静态方法,方法块,构造方法,类中有成员变量,构造这个类时这些成员变量就是初始值,成员变量会跟着方法执行顺序赋值;String类型的话是指向引用的,会有方法作用域的限制;