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)1つの引数でクラスコンストラクターを呼び出します...

this(val1,val2)2 つの引数を指定してクラス コンストラクターを呼び出す...

ここで、呼び出し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()

空のコンストラクターが呼び出されます。このコンストラクターは、1 つの引数を指定してコンストラクターを呼び出します。つまり、

new Rational(0)

再び呼び出す

new Rational(0,1)

その最後のコンストラクターは、インスタンス変数を設定します。


詳細については、このチュートリアルを参照してください。

また興味深い: Java 言語仕様

于 2014-06-03T11:08:59.477 に答える