构造器是静态方法。

1. Java中,用new()创建一个对象的时候,Java虚拟机首先去检查new指令的参数是否能够在方法区的常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否被加载、解析和初始化过。如果没有,则必须执行相应的类加载过程。

2. 类加载过程为:Java解释器查找类路径,以定位.class文件。然后载入.class,有关静态初始化的所有动作都会执行。因此,静态初始化只在Class对象首次加载的时候进行一次。

3. 在类加载检查通过后,虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可完全确定。为新生对象分配内存即为在Java堆中划分出一块确定大小的内存。

4. 内存分配完成后,虚拟机需要将分配到的内存空间都初始化为零值。如果使用TLAB(Thread Local Allocation Buffer, 本地线程分配缓冲),这一工作过程也可以提前到TLAB分配时进行。初始化为零值保证了对象的实例字段在Java代码中可以不赋初始值就可以直接使用,程序访问到这些字段的数据类型所对应的零值,引用被设置为null,基本数据类型被设置为0。

5. 接下来,虚拟机对对象进行必要的设置,例如这个对象是哪个类的实例、如何才能找到类的元数据信息、对象的哈希码、对象的GC分代年龄等信息,这些信息保存在对象的对象头中。

6. 执行所有出现在字段定义处的初始化操作。

7. 执行构造器。