构造函数链会在 Java 中创建多个对象吗?
Will constructor chaining create more than one object in Java?
如果我使用此关键字调用相同 class 的另一个构造函数。它会创建两个对象吗?
如果是这样,在下面的示例中哪个对象将处于活动状态:
Class Sample {
int a;
String b;
Sample() {
this("Hello");
a=10;
}
Sample(String temp) {
b = temp;
}
}
我想知道构造函数链接的行为。请解释一下它是如何工作的?
不,构造函数链接不会创建额外的实例,它只是执行链接构造函数的逻辑,允许您重用它的代码。
否,
this("Hello");
此处将调用 Sample(String temp)
构造函数,它不会创建另一个对象。
正如其他人提到的,您只会得到一个对象,每个构造函数都初始化同一个对象。
最好亲自看看:
public class Sample {
int a;
String b;
Sample() {
this("Hello");
a=10;
System.out.println("B: "+ hashCode());
}
Sample(String temp) {
b = temp;
System.out.println("A: "+ hashCode());
}
public static void main(String[] args) {
new Sample();
}
}
请注意,如果您尝试访问未初始化的字段,在未完全初始化的对象上调用实例方法可能会导致问题,因此请谨慎行事。
如果我使用此关键字调用相同 class 的另一个构造函数。它会创建两个对象吗?
如果是这样,在下面的示例中哪个对象将处于活动状态:
Class Sample {
int a;
String b;
Sample() {
this("Hello");
a=10;
}
Sample(String temp) {
b = temp;
}
}
我想知道构造函数链接的行为。请解释一下它是如何工作的?
不,构造函数链接不会创建额外的实例,它只是执行链接构造函数的逻辑,允许您重用它的代码。
否,
this("Hello");
此处将调用 Sample(String temp)
构造函数,它不会创建另一个对象。
正如其他人提到的,您只会得到一个对象,每个构造函数都初始化同一个对象。
最好亲自看看:
public class Sample {
int a;
String b;
Sample() {
this("Hello");
a=10;
System.out.println("B: "+ hashCode());
}
Sample(String temp) {
b = temp;
System.out.println("A: "+ hashCode());
}
public static void main(String[] args) {
new Sample();
}
}
请注意,如果您尝试访问未初始化的字段,在未完全初始化的对象上调用实例方法可能会导致问题,因此请谨慎行事。