在类中使用关键字this和多个构造函数

时间:2014-06-03 11:05:11

标签: java this instance-variables multiple-constructors

我不了解使用构造函数Rational()创建Rational对象时会发生什么。我的书说它将创建一个Rational对象,其值为0但内部存储为0/1。这个(0)如何存储为0/1?不是num和den 0的实例变量的默认值吗?

public class Rational{

  public Rational(){
      this(0);
  }

  public Rational(int n){
      this(n,1);
  }

  public Rational(int x, int y){
     num = x; 
     den = y; 
  }

  private int num;
  private int den; 
}

3 个答案:

答案 0 :(得分:5)

术语

Rational r = new Rational();

致电

public Rational(){
    this(0);
}

调用

public Rational(int 0){
    this(0,1);
}

调用

public Rational(int 0, int 1){
   num = 0; 
   den = 1; 
}

这意味着你的最终对象将是Rational(0,1);

答案 1 :(得分:3)

this指的是当前对象。

<强>但是

this()将调用默认构造函数的当前类构造函数。

this(val)将使用一个参数调用类构造函数...

this(val1,val2)使用两个参数调用类构造函数...

现在,如果你只调用this()但是你已经用这样的方式编写了构造函数,你可能已经调用了其他函数(withArg)。像下面..所以你也可以写嵌套的方式。

public Rational(){
    this(0);
}

1)this关键字可用于引用当前的类实例变量。

public Rational(int num, int den){
     this.num = num; 
     this.den = deb; 
  }

2)this()可用于调用当前类构造函数。

   public Rational(int num, int den){
             this(num);
             this.den = deb; 
          }

3)this关键字可用于调用当前类方法(隐式)。

public Rational(){
        this.someMethod();
    }

答案 2 :(得分:2)

  

在构造函数中,您还可以使用this关键字来调用同一个类中的另一个构造函数。这样做称为显式构造函数调用。 Source

如果你这样做

new Rational()

将调用空构造函数。然后,该构造函数将使用一个参数调用构造函数,即

new Rational(0)

再次调用

new Rational(0,1)

然后最后一个构造函数将设置实例变量。


有关详细信息,请查看此tutorial

同样有趣:Java Language Specification