Java对象的实例化过程是怎样的,之前就没有仔细想过,今天跟踪了一下,得到一些启发,虽然仍旧比较表面,至少比我之前的理解深刻了许多。
下面的过程class A extends class B
1.类调入内存的话,会首先载入所有的静态方法。这里先载入B的所有静态方法,然后是A的。
2.实例化A,首先给A中所有的非静态成员变量分配内存空间,并给他们设置初始值,例如int的就是0,String的是null。
3.初始化B,调用它的构造方法,并设定所有的变量。
4.在执行A的构造函数中除了super或者this构造函数以外的其他语句之前,先对A中的所有的非静态成员变量设置程序中指定的值,如果是对其他对象的句柄,则实例化对应的类。
5.执行A的构造函数。
6.A的实例化完成。
下面的过程class A extends class B
1.类调入内存的话,会首先载入所有的静态方法。这里先载入B的所有静态方法,然后是A的。
2.实例化A,首先给A中所有的非静态成员变量分配内存空间,并给他们设置初始值,例如int的就是0,String的是null。
3.初始化B,调用它的构造方法,并设定所有的变量。
4.在执行A的构造函数中除了super或者this构造函数以外的其他语句之前,先对A中的所有的非静态成员变量设置程序中指定的值,如果是对其他对象的句柄,则实例化对应的类。
5.执行A的构造函数。
6.A的实例化完成。