1

我不明白当您使用构造函数 Rational() 创建 Rational 对象时会发生什么。我的书说它将创建一个值为 0 但内部存储为 0/1 的 Rational 对象。this(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; 
}
4

3 回答 3

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

于 2014-06-03T11:08:32.573 回答
3

this指当前对象。

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

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

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

现在,如果你this()只调用但你已经以这样的方式编写了你的​​构造函数,你可能已经调用了其他 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();
    }
于 2014-06-03T11:07:35.290 回答
2

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

如果你这样做

new Rational()

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

new Rational(0)

再次调用

new Rational(0,1)

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


有关详细信息,请查看本教程

也很有趣: Java 语言规范

于 2014-06-03T11:08:59.477 回答