调用构造函数是否意味着创建实例?

时间:2014-01-12 18:21:30

标签: java

我知道在使用时:

A a = new A();

它在堆中分配一个空格,然后调用构造函数,最后返回引用。 但是我很困惑,如果我在另一个中调用构造函数,或者当子构造函数调用它的父元素时。这两种方式会创建一系列实例吗?或者“一个实例”中的一个“新”?

3 个答案:

答案 0 :(得分:3)

当你在构造函数的第一行写thissuper时,这会调用另一个构造函数来完成一些初始化工作。它不会创建一个单独的实例。

因此,如果类A扩展了类B,并且A的构造函数调用了super(),这意味着内存中的空间已被留出来用于B的实例将进行额外的初始化加载;但是这在SAME空间中作为A的其余构造函数完成。因此,如果你写A myObject = new A();,步骤将是 -

  1. 在堆上分配空间
  2. 运行B类(超类)
  3. 的构造函数
  4. 运行A类
  5. 的构造函数的REST
  6. 将对已创建空间的引用分配给myObject

答案 1 :(得分:1)

让我们从Java docs

开始
Point originOne = new Point(23, 94);
Rectangle rectOne = new Rectangle(originOne, 100, 200);
Rectangle rectTwo = new Rectangle(50, 100);
  

这些陈述中的每一个都有三个部分(下面将详细讨论):

     
      
  • 声明:以粗体设置的代码都是变量声明   将变量名称与对象类型相关联。
  •   
  • 实例化:新的   keyword是一个创建对象的Java运算符。
  •   
  • 初始化:   new运算符之后是对构造函数的调用   初始化新对象。
  •   

因此, new 是用于创建对象的关键字,构造函数初始化新对象。

答案 2 :(得分:0)

一般来说,有四种方法可以“初始化”一个类:

  1. 阻止{}(很少使用)

  2. membre字段初始化private in i=0

  3. 静态块static {}(类init)

  4. 构造函数public MyClass(int i)

  5. 或4.1默认构造函数

    (构造函数在其他构造函数之前调用)

    但在任何情况下构造函数都不会暗示新实例。 新实例由new运营商完成。当你从另一个constrcutor调用一个constructir(或调用一个超类构造函数)时,你只是“调用一个方法”。

    接受我缺乏形式主义,这只是一个简短的不完整摘要。