0

次のプログラムでは、 this(1) & this(2) を使用しています this(1) & this(2) を使用する目的は何ですか?また、これがキーワードまたはメソッドであることを知りたいですか?私は初めてですJava プログラミング言語。

class Const
{
    Const()
    {
        this(1);
        System.out.println(1);

    }
    Const(int x)
    {
        System.out.println(2);
    }
}
class const1 extends Const
{
    int a;
    const1()
    {
        this(8);
        System.out.println(3);

    }
        const1(int x)
    {

        System.out.println(4);

    }
    public static void main(String s[])
    {
        new const1();
    }
}
4

3 に答える 3

5

これらは代替コンストラクター呼び出しです。同じクラスの別のコンストラクターを呼び出します。これにより、複数のコンストラクターが共通の動作のために同じコードを共有できます。それがなければ、あなたは時々自分自身を繰り返さなければならないでしょう.

例えば:

Const()
{
    this(1);
    ...
}

実引数 "1" を指定してこのコンストラクターを呼び出します。

Const(int x) { ... }

同様の方法でキーワードを使用してsuper()、スーパークラス コンストラクターを呼び出すことができます。

Java 言語仕様、8.8.7.1、明示的なコンストラクター呼び出しから:

明示的なコンストラクター呼び出しステートメントは、次の 2 種類に分けることができます。

代替コンストラクターの呼び出しは、キーワード this で始まります (明示的な型引数で始まる可能性があります)。これらは、同じクラスの代替コンストラクターを呼び出すために使用されます。

スーパークラス コンストラクターの呼び出しは、キーワード super (明示的な型引数で始まる可能性があります) または Primary 式のいずれかで始まります。これらは、直接のスーパークラスのコンストラクターを呼び出すために使用されます。

于 2013-07-31T17:56:35.363 に答える
1

this()コンストラクター内で使用された場合、実際には同じクラスの別のコンストラクターを呼び出すために使用されます。オーバーロードされたコンストラクターを保持する場合に特に便利です。

public class Rectangle {
  private int x, y;
  private int width, height;

  public Rectangle() {
     this(0, 0, 0, 0);
  }
  public Rectangle(int width, int height) {
      this(0, 0, width, height);
  }
  public Rectangle(int x, int y, int width, int height) {
      this.x = x;
      this.y = y;
      this.width = width;
      this.height = height;
  }
...
}

それらを使用する場合は、コンストラクターの最初のステートメントであるthis()必要があることを覚えておいてください。super()したがって、コンストラクター内で一緒に使用することはできません。

thisメソッド本体内で使用すると、メソッドが呼び出された現在のインスタンスが参照されます。

thissuperの Oracle チュートリアルを読んでください。

于 2013-07-31T17:58:59.887 に答える
0

メソッドにオーバーロードを作成するのと似ているため、次のような「オプションの」パラメーターをエミュレートします。

DoStuff(int x, int y)
{
    //Stuff
}

DoStuff(int x)
{
    DoStuff(x, x);
}

コンストラクターで実行している場合を除きます (値を渡さない場合は、値 1 を使用してください)。質問に答えるにthisは、オブジェクトのコンストラクターを呼び出します。

于 2013-07-31T17:59:42.813 に答える