变量仅在对象创建期间获取内存分配,那么为什么为构造函数外部的变量赋值不会产生错误?此外,由于没有创建特定对象,因此该指定值的位置是什么?
答案 0 :(得分:0)
因为所有实例字段初始化代码(以及任何实例初始化程序块)都被执行,就像它们是构造函数的一部分一样。
变量仅在对象创建期间获取内存分配
实际上,顺序如下:
this(...)
或super(...)
来电。 (这会对链执行字段初始化和运行构造函数进行递归。对于this
调用,我们跳过下一步。)步骤6是您关注的字段初始值设定项的处理方式。初始化表达式和块的代码组合成一个合成方法,该方法由构造函数在适当的点调用。但是,这是一个实现细节。
如您所见,分配给对象的内存量很早就确定了,并且不受任何初始化逻辑的影响。无论如何,变量和在对象本身中表示它们所需的内存量都是相同的。
此外,由于没有创建特定对象,此指定值的位置是什么?
字段的位置是在步骤3中分配的对象的一部分。就像在构造函数中完成初始化的情况一样。
(也许您对将对象或数组分配给字段时实际发生的事情感到困惑?请记住,对象和数组类型称为引用类型。类型为引用的字段或变量type对应于只是引用的位置...不是引用所引用的对象的实际状态。)
(也许你认为构造函数的调用与普通方法的调用相同。但事实并非如此......见上文。)