显式构造函数调用的用法

时间:2016-08-19 07:48:15

标签: java constructor this

我正在练习这个'构造函数中的关键字。我开始知道这个'将有助于显式调用构造函数。但它实时使用的是什么。

显式构造函数调用。

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();
    }
}

3 个答案:

答案 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参数

调用构造函数