//测试初始化对象的时候的流程
1首先两个测试类(父类和子类)(命名很不规范,大家谅解!)
public class asd extends A {
public asd(){
System.out.println("d1");
}
static{
System.out.println("d2");
}
void asd1(){
System.out.println("d3");
}
public static void main(String[] args) {
A a = new A();
a.a();
asd d = new asd();
d.asd1();
d.a();
}
}
package random;
public class A {
public A(){
System.out.println("a1");
}
static{
System.out.println("a2");
}
void a(){
System.out.println("a3");
}
}
结果是:
a2
d2
a1
a3
a1
d1
d3
a3
另外我在晚上查了下资料别人说的流程是:
所有的类都是在对其第一次使用时,动态加载到JVM中。当首次创建类型为Dog的对象时,或者Dog类的静态方法,静态属性域首次被访问时,java解释器查找classPath,定位到Dog.class文件
2. 载入Dog.class文件,生成一个Class类型对象,所有有关的静态初始化动作都会执行,静态代码块,静态成员属性。 并且这种初始化动作只在Class对象首次加载时候进行一次。
3. 当用new Dog()创建对象时,首先JVM在堆heap上为Dog对象分配足够的存储空间
4. 存储空间清空,自动将Dog对象中的所有基本类型数据都设置成了默认值,对象引用被设置为null
5. 执行所有在字段定义处的一些初始化操作
6. 调用构造器方法。(没有继承)
如此一来,便创建了这个对象.