【问题标题】:Constructor and new operator in JavaJava中的构造函数和new运算符
【发布时间】:2014-12-10 17:37:29
【问题描述】:

要从 Java 中的 Student 类创建新对象,我们通常使用以下语句

Student std = new Student();

我读到 new 运算符通过在堆中分配内存空间来创建新对象,但是我还读到调用构造函数 Student() 创建它。 所以,这有点令人困惑。哪一个正在创建对象std?是 new 操作符还是默认构造函数?

【问题讨论】:

  • new 只是告诉编译器创建用于实例化对象的指令,而不是真正的运算符。
  • 来点JLS怎么样?
  • new Student() 调用构造函数。你问的两件事实际上是一回事。
  • 或多或少,new 分配内存;构造函数初始化对象。

标签: java


【解决方案1】:

拥有与类同名的方法是合法的(尽管令人困惑),new 消除了任何歧义。 new 表示JVM 应该为给定的类和参数列表调用instance initialization method,并返回初始化对象(在初始化方法的第一个(隐藏)参数中引用)。

Java 的设计者可能已经找到了一种替代语法,但他们的设计目标是,任何时候在堆上分配内存时,都应该通过关键字new 显式调用它。现在这可能看起来很奇怪,但大多数 Java 的目标受众是对垃圾收集持怀疑态度的 C 和 C++ 程序员,这是为了确保开发人员不会在他们不知情的情况下分配内存。

【讨论】:

    猜你喜欢
    • 2014-01-22
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 2017-01-14
    • 2017-07-29
    • 2023-03-27
    相关资源
    最近更新 更多