2010-03-10 87 views
0

当你实例调用构造一个新的对象,即 Foo bar = new Foo(var);在堆(Java)上创建对象之后调用对象的构造函数吗?

什么时候在构造函数中的代码实际上获取关系调用来创建对象堆?当构造函数修改bar的成员变量时,是否存储已分配的变量并包含默认值?

+0

@theactiveactor - 你需要更多的帮助吗?我注意到这个问题没有得到任何批准就被打开了。 – JonH 2010-03-12 13:42:03

回答

3

一旦调用了new,它就知道需要将多少内存分配到一个变量类型的堆中,在您的情况下是Foo。一旦只分配了内存,那么是设置的值。想想看,如果你没有成员变量的内存,你还有什么要分配成员变量?如果没有内存,新的会抛出一个你需要处理的异常。

过程:

  1. JVM上看到存储对象如果对象的类型分配null
  2. 呼叫堆(Ref类型)
  3. 分配缺省值
  4. new
  5. 分配内存构造函数
+1

5)调用构造函数 - 这是原始问题 – 2010-03-10 18:06:38

+0

@ian - 对不起,我添加了:)。谢谢你! – JonH 2010-03-10 18:14:25

+0

你能说这些信息的来源吗?我想了解更多。 – 2010-03-31 12:52:05

0

当JVM遇到新的关键字时,它为该类类型分配所需的内存,如果没有初始化,则它将所有成员初始化为其默认值,并且如果该成员是对象,则为空。

0

这里 Foo bar = new Foo(var);我们正在创建bar对象。当我们使用时,新的关键字的内存分配在堆上。分配的内存量取决于类的实例变量.JVM将计算要分配的内存量,然后使用新的它将分配内存。这里是一个引用变量指向对象分配的堆。

0

构造函数不能被调用,直到内存存在。

对于成员变量,它是同一规则的递归应用程序。

相关问题