【发布时间】:2020-05-02 11:44:30
【问题描述】:
我一直在学习 Head First Java,目前正在学习构造函数章节。他们解释说,对象是通过在 new 关键字之后调用构造函数来创建的。
我的问题:当你创建一个新对象时,它到底在运行什么?
我们以下面的代码为例:
public class Const {
// instance variables
int number;
String name;
// Constructors
public Const() {
//implicit super
System.out.println("no-arg constructor");
}
public Const(int i, String s) {
//implicit super()
number = i;
name = s;
System.out.println("two-arg constructor");
}
// test method
public void doSomething() {
System.out.println("I'm a test");
}
// Main
public static void main(String[] args) {
Const c1 = new Const();
Const c2 = new Const(5, "Jerry");
}
}
现在这是我认为在创建 c1 时发生的事情:
-
public Const()被调用 -
super()被调用 - Const 的
Object部分已构建。 -
public Const()回到了栈顶。 - 现在我的麻烦来了。对象的实例变量和方法是何时以及如何创建的(添加了哪些隐式代码)?
【问题讨论】:
-
你似乎问了 4 个问题而不是 1 个
-
具体细节因实现而异。但实际上,发生的情况是对象首先在内存中分配,包括所有内容、所有字段和所需的引用。然后调用初始化器和构造器。
-
抱歉,问题已修改。 @JonSkeet 感谢您的文档。有点清除它:)
-
@JonSkeet 发言了!!!!!
标签: java oop object inheritance constructor