何时调用构造函数?
答案 0 :(得分:20)
分配对象内存,初始化具有初始值的字段变量,然后调用构造函数,但其代码在对象超类的构造函数代码之后执行。
答案 1 :(得分:6)
在字节码级别。
this
注意:字节代码级别的构造函数包含变量的初始值和Java构造函数中的代码。 e.g。
int a = -1;
int b;
Constructor() {
super();
b = 2;
}
与
相同int a;
int b;
Constructor() {
super();
a = -1;
b = 2;
}
另请注意:在初始化类的任何部分之前,始终会调用super()。
在某些JVM上,您可以创建一个对象,而无需使用Unsafe.allocateInstance()进行初始化。如果以这种方式创建对象,则无法调用构造函数(不使用JNI),但可以使用反射来初始化每个字段。
答案 2 :(得分:4)
在对象创建时调用它。必须首先为对象保留内存,否则构造函数代码无法运行。也许我们可以在创建对象后说出来。还要注意,在构造函数代码之前调用类中编写的初始化代码。
public Ex {
int xVal = -1;
int yVal;
public Ex() {
// xVal is already -1.
//yVal defaults to 0.
}
}
答案 3 :(得分:2)
JVM将首先为您的对象分配内存,然后初始化所有字段,然后调用您的构造函数。
答案 4 :(得分:1)
在创建新对象时调用构造函数。
NewObject n = new NewObject();
public class NewObject {
public NewObject() {
// do stuff when object created
}
}
希望这有帮助。
答案 5 :(得分:1)
除了默认构造函数的情况之外,基本上调用构造函数来初始化实例变量的值。但是,实例变量的初始化分4步完成(如适用):
答案 6 :(得分:0)
构造函数是实际创建对象的东西。通过执行new MyClass()
(或其参数化版本)创建对象时调用它。
答案 7 :(得分:0)
鉴于这些选项,1。在创建对象之前。
构造函数完成后,已创建对象。
答案 8 :(得分:0)
创建对象后
使用新的运算符(例如Student s = new Student();)创建对象之后; 首先创建Student对象,然后调用构造函数初始化该对象的变量
我们可以使用以下代码证明在创建对象后调用了构造函数
这里我们使用实例块。并且实例块在构造函数之前执行
所以我要在三个地方打印哈希码
这三个哈希码都相等,这意味着在执行构造函数之前先创建对象
因为具有哈希码,所以必须有一个对象。并且如果在实例块和构造函数中打印的哈希码相等。这意味着必须在构造函数执行之前创建对象
答案 9 :(得分:-1)
每当我们使用' new'创建对象时运算符然后第一个任务由new执行,即它为堆中的对象分配内存,指向堆栈中的引用变量并设置对象字段的初始值。然后它调用构造函数并传递'这个'作为根据您的要求初始化它的对象......
因此,在创建对象之后总是调用构造函数....
注意:当你输入构造函数时,这个'关键字正在运行意味着您的对象已创建。