我知道在使用时:
A a = new A();
它在堆中分配一个空格,然后调用构造函数,最后返回引用。 但是我很困惑,如果我在另一个中调用构造函数,或者当子构造函数调用它的父元素时。这两种方式会创建一系列实例吗?或者“一个实例”中的一个“新”?
答案 0 :(得分:3)
当你在构造函数的第一行写this
或super
时,这会调用另一个构造函数来完成一些初始化工作。它不会创建一个单独的实例。
因此,如果类A
扩展了类B
,并且A
的构造函数调用了super()
,这意味着内存中的空间已被留出来用于B
的实例将进行额外的初始化加载;但是这在SAME空间中作为A
的其余构造函数完成。因此,如果你写A myObject = new A();
,步骤将是 -
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)
一般来说,有四种方法可以“初始化”一个类:
阻止{}
(很少使用)
membre字段初始化private in i=0
静态块static {}
(类init)
构造函数public MyClass(int i)
或4.1默认构造函数
(构造函数在其他构造函数之前调用)
但在任何情况下构造函数都不会暗示新实例。 新实例由new
运营商完成。当你从另一个constrcutor调用一个constructir(或调用一个超类构造函数)时,你只是“调用一个方法”。
接受我缺乏形式主义,这只是一个简短的不完整摘要。