2016-03-24 38 views
-1

コンストラクターを呼び出す複数回

+0

あなたはどのようなものです:setterメソッドを使用して

b = new a(1); 

達成しようとしている?クラスaの複数のインスタンスや変数 'i'の値を複数回出力することはありますか? – javaPhobic

+2

これは明らかに[XY問題](http://xyproblem.info)です。達成しようとしていることと、コンストラクターを複数回呼び出すことが有用であると思われる理由を教えてください。 –

+0

'while(x> 0) { b = new a(x--); } ' –

答えて

2

class Aのコンストラクタは、class Aのオブジェクトを構成します。

オブジェクトの構築は一度しか行われず、その後はメソッド(関数)を使用してオブジェクトの状態を変更することができます。

プログラマーが自分のクラスにコンストラクターを書き込んでいない場合、Javaコンパイラーはクラス(public constructor without any parameters)のコンストラクターを単独で配置します。

コンストラクタがプログラマによって提供された場合、コンパイラはデフォルトのコンストラクタを作成しません。プログラマは、明示的なコンストラクタのシグネチャに従って、自分のクラスのオブジェクトの作成を知り、それを望んでいると仮定します。

コンストラクタの呼び出しはチェーンされています。クラス関係の下に存在するとします。

Child.java extends Parent.java and Parent.java extends GrandParent.javaChild child = new Child();が行われている場合

は今、1つのオブジェクトのみが作成され、それがChild.javaのですが、オブジェクトがParent、その後Childの特徴と、その後GrandParent最初のすべての機能を持っています。

したがって、GrandParent.javaの最初のコンストラクタが呼び出され、Parent.javaが呼び出され、最後にChild.javaのコンストラクタが呼び出されます。

コンストラクタは特殊で、他のメソッドとは異なります。

コンストラクタの意図は、オブジェクトを作成することですので、あなたがnew演算子を使用するたびに、コンストラクタが呼び出され、新しいオブジェクトが作成されます。コンストラクタを直接呼び出すことはできません。あなたはそれを呼び出すために新しい演算子が必要です。 getInstance()のようないくつかのクラス定義メソッドがあっても、それはまだnew演算子を使ってオブジェクトを構築し、作成したオブジェクトを返します。

* PSコンストラクタを呼び出さずに(シリアル化のような)オブジェクトを作成する方法がありますが、ここでの議論の文脈から外れています。

+0

私はメソッドのようなコンストラクタを使いたいと思っていて、コンストラクタを何度も再利用する理由があります。 – Rajesh

+0

私は自分の答えを編集しました。なぜコンストラクターがその言語に含まれているのかを理解してください。コンストラクタを(newを使用して)複数回呼び出すと、コンストラクタを呼び出したときと同じくらい多くの異なる新しいオブジェクトを作成します。 –

+0

@Rajeshは、他の人も私も含めて、ここに投稿してコンストラクタのコンセプトやインテントを手に入れることができました。私が投稿したすべてのコメントと答えを読んだり、コンストラクタとmerhodsの意図が何であるかという概念を理解したりすることをお勧めします。あなたの問題を解決するための適切なツールを適用する(上記のように問題をXY問題にしない) –

0

コンストラクタは、オブジェクトの作成時に一度だけ呼び出されます。

達成したいことについて具体的にお考えですか?

しかし、あなたは次の2つのうちのいずれかを試すことができると思います。

'b' の新しいオブジェクトを作成するためにコンストラクタを呼び出すと、オブジェクトに割り当て:

void setI(int i){ 
    this.i = i; 
} 

b.setI(1); 
0
int x = 10; 
    while(x > 0) 
    { 
     a b = new a(x); 
    } 
関連する問題