包含相同 Class/Object 的另一个构造函数的构造函数
A constructor containing another constructor of the same Class/Object
我有一个 class SomeClass
具有以下成员字段和构造函数
private int someInt;
private String someStr;
private String strTwo;
//the contructors
public SomeClass() {}
// second constructor
public SomeClass(int someInt, String someStr) {
this.someInt = someInt;
this.someStr = someStr;
}
// my emphasis here
public SomeClass(int someInt, String someStr, String strTwo) {
// can i do this
new SomeClass(someInt, someStr); // that is, calling the former constructor
this.strTwo = strTwo;
}
第三个构造函数是否会创建与以下对象相同的对象:
public SomeClass(int someInt, String someStr, String strTwo) {
this.someInt = someInt;
this.someStr = someStr;
this.strTwo = strTwo;
}
使用this
关键字call a constructor from another constructor。如果确实调用了另一个构造函数,那么它必须是构造函数主体中的第一条语句。
public SomeClass(int someInt, String someStr, String strTwo) {
// Yes you can do this
this(someInt, someStr); // calling the former constructor
this.strTwo = strTwo;
}
不,至少不是你写的那样。
您的第三个构造函数创建 new
对象,然后设置它的 this
对象的 strTwo
的成员变量。您实际上是在处理两个单独的对象。你在第三个构造函数中 new
的对象将被垃圾回收,因为在离开构造函数后没有对它的引用。
//This function is called when creating a new object with three params
public SomeClass(int someInt, String someStr, String strTwo) {
new SomeClass(someInt, someStr); //Here you create a second new object
//Note that the second object is not set to a variable name, so it is
//immediately available for garbage collection
this.strTwo = strTwo; //sets strTwo on the first object
}
如果您的目标是创建一个功能与双参数构造函数创建的对象相同的对象,则必须这样做:
public SomeClass(int someInt, String someStr, String strTwo) {
this.SomeClass(someInt, someStr);
this.strTwo = strTwo;
}
这将是等效于在一个函数中执行所有成员字段集的代码,只是在对象构造实际到达最终产品的方式上只有很小的变化。与往常一样,请注意,在这两个函数之间创建的对象将是相等的,但 'same' 对象不是:也就是说,它们将指向内存中保存相同值的不同位置。 'same' 在谈论对象时可能是一个棘手的词。
您需要在第三个构造函数中使用关键字"this":
public SomeClass(int someInt, String someStr, String strTwo) {
// can i do this
this(someInt, someStr); // that is, calling the former constructor
this.strTwo = strTwo;
}
那么应该是一样的结果吧
我有一个 class SomeClass
具有以下成员字段和构造函数
private int someInt;
private String someStr;
private String strTwo;
//the contructors
public SomeClass() {}
// second constructor
public SomeClass(int someInt, String someStr) {
this.someInt = someInt;
this.someStr = someStr;
}
// my emphasis here
public SomeClass(int someInt, String someStr, String strTwo) {
// can i do this
new SomeClass(someInt, someStr); // that is, calling the former constructor
this.strTwo = strTwo;
}
第三个构造函数是否会创建与以下对象相同的对象:
public SomeClass(int someInt, String someStr, String strTwo) {
this.someInt = someInt;
this.someStr = someStr;
this.strTwo = strTwo;
}
使用this
关键字call a constructor from another constructor。如果确实调用了另一个构造函数,那么它必须是构造函数主体中的第一条语句。
public SomeClass(int someInt, String someStr, String strTwo) {
// Yes you can do this
this(someInt, someStr); // calling the former constructor
this.strTwo = strTwo;
}
不,至少不是你写的那样。
您的第三个构造函数创建 new
对象,然后设置它的 this
对象的 strTwo
的成员变量。您实际上是在处理两个单独的对象。你在第三个构造函数中 new
的对象将被垃圾回收,因为在离开构造函数后没有对它的引用。
//This function is called when creating a new object with three params
public SomeClass(int someInt, String someStr, String strTwo) {
new SomeClass(someInt, someStr); //Here you create a second new object
//Note that the second object is not set to a variable name, so it is
//immediately available for garbage collection
this.strTwo = strTwo; //sets strTwo on the first object
}
如果您的目标是创建一个功能与双参数构造函数创建的对象相同的对象,则必须这样做:
public SomeClass(int someInt, String someStr, String strTwo) {
this.SomeClass(someInt, someStr);
this.strTwo = strTwo;
}
这将是等效于在一个函数中执行所有成员字段集的代码,只是在对象构造实际到达最终产品的方式上只有很小的变化。与往常一样,请注意,在这两个函数之间创建的对象将是相等的,但 'same' 对象不是:也就是说,它们将指向内存中保存相同值的不同位置。 'same' 在谈论对象时可能是一个棘手的词。
您需要在第三个构造函数中使用关键字"this":
public SomeClass(int someInt, String someStr, String strTwo) {
// can i do this
this(someInt, someStr); // that is, calling the former constructor
this.strTwo = strTwo;
}
那么应该是一样的结果吧