【问题标题】:Constructor is "invoked" vs. Constructor is "executed"?构造函数被“调用”与构造函数被“执行”?
【发布时间】:2014-03-14 01:14:23
【问题描述】:

构造函数调用和构造函数执行有什么区别? 我正在阅读 james Gosling 的 java 编程语言中的构造函数顺序依赖关系。作者指出,当您创建对象构造函数时,首先调用构造函数,然后初始化 feild 成员,最后执行构造函数。对我来说两者听起来都一样。

【问题讨论】:

  • 我怀疑这意味着当你创建一个对象时,superclass 构造函数被调用,然后字段成员被初始化,等等。我认为没有打算使用不同术语背后的任何意义——它们的意思是一样的。但这只是一个猜测,因为我没有这本书。如果它可以在线获得,以便我们自己阅读文本,那可能会有所帮助。
  • 创建对象时,java首先需要为该对象分配内存空间来保存变量。
  • 为什么投反对票?这是一个合理的问题...

标签: java constructor terminology


【解决方案1】:

在这种情况下,“调用”是指调用它,而“执行”是指实际运行代码主体

在您调用它和代码运行之间,这些字段被初始化。

所以,你调用它,然后初始化发生,然后它被执行。

试试这个:

class Example {

    static int report() { System.out.println("initialize"); return 0; }

    int x = report(); // <- [Step 2] Initialization

    Example () {
        System.out.println("execute"); // <- [Step 3] Execution
    }

}

然后,在别处:

System.out.println("invoke");
new Example(); // <- [Step 1] Invocation

输出将是:

invoke
initialize
execute

【讨论】:

  • +1;实际上,当你调试一个类并在构造函数中设置断点时,你可以看到这种行为
猜你喜欢
  • 1970-01-01
  • 2016-07-12
  • 2011-02-12
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
  • 2019-05-27
  • 2021-10-11
  • 1970-01-01
相关资源
最近更新 更多