有什么方法可以从参数化构造函数中调用默认构造函数吗?

时间:2013-01-03 07:54:18

标签: java default-constructor parameterized-constructor

假设我有以下代码

class C {
    int i;
    String s;

    C(){
        System.out.println("In main constructor");
        // Other processing
    }

    C(int i){
        this(i,"Blank");
        System.out.println("In parameterized constructor 1");
    }

    C(int i, String s){
        System.out.println("In parameterized constructor 2");
        this.i = i;
        this.s = s;
        // Other processing 
        // Should this be a copy-paste from the main contructor? 
        // or is there any way to call it? 
    }
    public void show(){
        System.out.println("Show Method : " + i + ", "+ s);
    }
}

我想知道,有什么办法,我可以从参数化构造函数中调用main(默认)构造函数(在这种情况下是C(int i, String s))?

或者我只是将主(默认)构造函数中的所有内容复制粘贴到参数化的构造函数中,如上面代码中的注释所示?

注意

我需要在参数化构造函数中设置变量is之后调用默认构造函数,因为处理涉及这些变量。

修改

我看到this post,它表示放置this()作为第一行会调用默认构造函数。但是我需要在设置值之后调用它。

9 个答案:

答案 0 :(得分:4)

调用this()会有效,但请注意这必须是构造函数中的第一个语句。例如:下面的代码是非法的,不会编译:

class Test {
    void Test() { }
    void Test(int i) {
        i = 9;
        this();
    }
}

答案 1 :(得分:2)

一个选项可能是从默认构造函数中调用参数化构造函数。

C(){
    this(0, "Blank");
}

C(int i){
    this(i,"Blank");
}

C(int i, String s){
    this.i = i;
    this.s = s;
}

此模式将允许您为具有较少参数的构造函数提供更具体的构造函数的默认值。

另外,注意链接构造函数必须作为另一个构造函数中的第一个调用完成 - 在初始化变量后不能调用另一个构造函数:

C(int i, String s){
    this.i = i;
    this.s = s;
    this();     // invalid!
}

如果你真的想做这样的事情,可以考虑使用init方法:

C() {
    init();
}
C(int i, String s) {
    this.i = i;
    this.s = s;
    init();
}

答案 2 :(得分:1)

在其他构造函数中调用this()作为第一个语句就足够了。

C(int i, String s)
{
   this();
   // other stuff.
}

答案 3 :(得分:1)

引用文档:

  

调用另一个构造函数必须第一行   构造

所以不可能。在第一行使用this()。

答案 4 :(得分:1)

您可以将所有代码从主构造函数移动到某个方法,例如mainProcessing()。

C()
{
    System.out.println("In main constructor");
    mainProcessing();
}

private void mainProcessing()
{
    // Move your code from main constructor to here.
}

现在在参数化构造函数2中,您可以在所需位置调用此方法mainProcessing()。

C(int i, String s)
{
    System.out.println("In parameterized constructor 2");
    this.i = i;
    this.s = s;
    mainProcessing();
}

答案 5 :(得分:0)

只需调用构造函数ny this();语句作为默认构造函数的第一行....

答案 6 :(得分:0)

您可以使用this();来调用默认构造函数

C(int i, String s){
   this(); // call to default constructor
   // .....       
}

答案 7 :(得分:0)

在参数化构造函数

的第一行中使用此()
C(int i, String s){
    this();
    System.out.println("In parameterized constructor 2");
    this.i = i;
    this.s = s;
    // Other processing
    // Should this be a copy-paste from the main contructor?
    // or is there any way to call it?
}

答案 8 :(得分:0)

您可以在第一个语句中调用this()来调用任何参数化构造函数中的默认构造函数。

注意this()强制性地应该是构造函数定义中的第一行

C(int i, String s){
   this();
    . . . . 
}
  

但是我需要在设置值之后调用它。

这是不可能的。构造函数调用必须是第一个语句。

您可以浏览此链接:constructor invocation must be the first line