与往常一样,找到针对此类问题的解决方案的最佳位置是Java语言规范。
具体来说,从创建新实例的部分可以理解,这是创建新对象时的顺序,只要没有异常发生:
- 内存已分配。
- 字段被初始化为其默认值。
- 除非是,否则将调用所选构造函数的“第一行”
Object
。通过第一线我的意思是要么显式调用super()
或this()
,或隐式调用super()
。 - 该实例初始化被执行,字段被初始化为它们的请求的值(实际字段初始化通常编译为实例初始化的内嵌部分)。
- 其余的构造函数代码将执行。
现在,您的老师可能会将内存分配作为实际的操作系统调用来谈论-
在这种情况下,从JVM管理自己的堆的意义上来说,他是对的,因此Java内存分配不必转换为OS内存分配调用(尽管可以)。



