1

コンストラクターがある場合

public class Sample {


    public static StackOverflowQuestion puzzled;
    public static void main(String[] args) {

        puzzled = new StackOverflowQuestion(4);
    }
}

そして、私が持っているプログラムのメインメソッド内

public class StackOverflowQuestion {

    public StackOverflowQuestion(){
    //does code
    }

    public StackOverflowQuestion(int a){
    this();
   }
}

これは、constructor2 を介して StackOverflowQuestion のインスタンスを作成し、次にコンストラクター 1 を介して StackOverflowQuestion の別のインスタンスを作成するため、StackOverflowQuestion の 2 つのインスタンスが互いに直接存在するようになりましたか?

または、この場合のコンストラクター2は横方向に調整し、代わりにコンストラクター1を介してStackOverflowQuestionのインスタンスを作成しますか?

4

5 に答える 5

4

私はあなたが意味すると思います:

public class StackOverflowQuestion
{

    public StackOverflowQuestion(){ // constructor
       //does code
    }

    public StackOverflowQuestion(int a){ // another constructor
       this();
    }
}

そして、次のように呼び出します。

StackOverflowQuestion puzzled = new StackOverflowQuestion(4);

newは一度しか実行されないため、これは 1 つのオブジェクトのみを作成します。この呼び出しthis()は、新しいオブジェクトを作成せずに、他のコンストラクターでコードを実行します。そのコンストラクターのコードは、現在作成されているインスタンスを変更できます。

于 2013-04-24T08:26:11.787 に答える
3

インスタンスを 1 つだけ作成します。その使用例の 1 つは、コンストラクターのパラメーターにデフォルト値を与えることです。

public class StackOverflowQuestion
{
    public StackOverflowQuestion(int a) {
        /* initialize something using a */
    }

    public StackOverflowQuestion() {
        this(10); // Default: a = 10
    }
}
于 2013-04-24T08:25:36.357 に答える
1

this()と同じではありませんnew StackOverflowQuestion()

this(5)と同じではありませんnew StackOverflowQuestion(5)

this()this(5)同じクラスの別のコンストラクターを呼び出します。

したがって、この例では:

public class StackOverflowQuestion
{
    private int x;
    private int y;
    private int a;

    public StackOverflowQuestion(){
       this.x = 1;
       this.y = 2;
    }

    public StackOverflowQuestion(int a){
       this();
       this.a = a;
    }
}

への呼び出しthis()は、オブジェクトを初期化するだけで、新しいインスタンスを作成しません。オブジェクトnew StackOverflowQuestion(5)の新しいインスタンスを実際に作成するコンストラクターを呼び出して、すでに呼び出されていることを思い出してください。StackOverflowQuestion

于 2013-04-24T08:37:25.823 に答える
1

Aconstructorはオブジェクトを作成しません。オブジェクトの状態を初期化するだけです。オブジェクトを作成するのはnewオペレーターです。新しいクラス インスタンスの作成 - JLSを読みます。これはどういう意味ですか:

public class StackOverflowQuestion
{

   public StackOverflowQuestion(){ // constructor
      //does code
  }

  public StackOverflowQuestion(int a){ // another constructor
     this();
  }
}

 StackOverflowQuestion puzzled = new StackOverflowQuestion(4);

の新しいオブジェクトが演算子StackOverflowQuestionによって作成され、新しく作成されたオブジェクトへの参照が結果として返され、参照変数にnew割り当てられる直前に、コンストラクターは、つまり、既定のコンストラクター内のコード (存在する場合) を呼び出し、コントロールが に戻り 、その内部の残りのコード (存在する場合) が新しいオブジェクトを初期化するために処理されます。StackOverflowQuestion puzzledStackOverflowQuestion(int a)this()public StackOverflowQuestion()`StackOverflowQuestion(int a)

于 2013-04-24T08:30:53.600 に答える
0

クラスのインスタンスは、「new」演算子を使用した瞬間に作成されます。コンストラクターなしでクラスを作成することは完全に可能です。その場合、デフォルトで、パラメーターのないコンストラクターが使用できるためです。

「this」キーワードは THIS 特定のオブジェクトを指しているだけなので、「this()」を呼び出すことは、「自分自身のコンストラクター関数 (パラメーターを持たない関数) を呼び出して、内部にあるものを実行する」ことを意味します。

于 2013-04-24T08:31:32.267 に答える