我正在练习这个'构造函数中的关键字。我开始知道这个'将有助于显式调用构造函数。但它实时使用的是什么。
显式构造函数调用。
class JBT {
JBT() {
this("JBT");
System.out.println("Inside Constructor without parameter");
}
JBT(String str) {
System.out
.println("Inside Constructor with String parameter as " + str);
}
public static void main(String[] args) {
JBT obj = new JBT();
}
}
答案 0 :(得分:1)
在现实生活中,您通常使用它来设置默认值(就像您在示例中所做的那样),以便您可以简化用户的classe界面。
很多时候,当课程随着时间的推移而逐渐发展并添加一些新功能时,也需要这样做。考虑一下:
// First version of "Test" class
public class Test {
public Test(String someParam) {
...
}
}
// use of the class
Test t = new Test("Hello World"); // all is fine
现在,在以后的日子里,您希望为Test添加一个很酷的新的可切换功能,因此您可以将构造函数更改为:
public Test(String someParam, boolean useCoolNewFeature)
现在,原始客户端代码将不再编译,错误。
但是,如果您另外提供旧的结构签名,一切都会没问题:
public Test(String someParam) {
this(someParam, false); // cool new feature defaults to "off"
}
答案 1 :(得分:0)
this
返回对当前实例/对象的引用。
好吧,你可以使用这个关键字来调用另一个构造函数 如果要从中调用构造函数,则为同一类的构造函数 基类或超类然后你可以使用超级关键字。打电话给一个 来自other的构造函数在Java中称为Constructor chaining。
示例:
public class ChainingDemo {
//default constructor of the class
public ChainingDemo(){
System.out.println("Default constructor");
}
public ChainingDemo(String str){
this();
System.out.println("Parametrized constructor with single param");
}
public ChainingDemo(String str, int num){
//It will call the constructor with String argument
this("Hello");
System.out.println("Parametrized constructor with double args");
}
public ChainingDemo(int num1, int num2, int num3){
// It will call the constructor with (String, integer) arguments
this("Hello", 2);
System.out.println("Parametrized constructor with three args");
}
public static void main(String args[]){
//Creating an object using Constructor with 3 int arguments
ChainingDemo obj = new ChainingDemo(5,5,15);
}
}
输出:
Default constructor
Parametrized constructor with single param
Parametrized constructor with double args
Parametrized constructor with three args
答案 2 :(得分:-1)
输出将是:
Inside Constructor with String parameter as JBT
Inside Constructor without parameter
因为this("JBT")
将使用String
参数