2017-11-13 6 views
-6

javaのコンストラクタに対するinitメソッドのメリットとデメリットは何ですか?彼らはどちらも同じ目的を持っています。どのようにそれらの間で選択する?initメソッドのメリット/デメリット

public class A {  
    private int x; 

    public A(int x){ 
    this.x = x; 
    } 

    public void init(int x){ 
    this.x = x; 
    } 
} 

ここでは、コンストラクタまたはinitメソッドを使用できます。

+4

"どちらも同じ目的を持っています"、そうではありません。常にコンストラクタが必要です。すべてのコンストラクタに同じコードが含まれている場合は、initメソッドが便利ですが、プライベートにすることをお勧めします。そのため、サブクラスはそれを変更しません。 – Stultuske

答えて

3

あなたは間違っています。彼らはではなく、は同じ目的を持っています。

new()演算子を使用して新しいオブジェクトを作成する場合は、コンストラクタはです。常にが必要です。

initメソッドは(この点について、さらに読書のためhereを参照してください)例サーブレットのもののために、特定の文脈で意味をなすかもしれない何かです。

そして、注意してください:あなたの例では、1可能性あなたのinitメソッドよりセッターとして - それは単に対応するフィールドを設定します。

そこから:

はすべての
  • まず、あなたがあなたのクラスに入れたいコンストラクタを考える(尋ねることによって:クラスの新しいインスタンスを作成するために必要とされる情報)
  • 特別必要がある場合は、特定のフィールドのセッターを追加することを検討 - (または上にレイアウトとして、init()方法を提供することが必要になることがあります場合には、オブジェクト作成I nitializiationは同じ時点では発生しません)
+0

返信いただきありがとうございます。私はあなたが言っていることに同意します。私の質問は、initメソッドとパラメータ化されたコンストラクタの両方をオブジェクトの初期化に使用することです。 – Rakesh

+0

どちらをお好みですか?なぜ? – Rakesh

+0

私は両方の質問に答えたと思います。 1つ以上のコンストラクタから始めます。あなたがする必要がある場合は、initメソッドを使用します。それはすべてこれにあります。 – GhostCat

1

コンストラクタは通常の方法ではありません。 new A()を呼び出すと、が常にになるという意味で特別です。コンストラクターを指定しないと、Javaは自動的にコンストラクターを作成します。その結果、コンストラクタにはreturnがなく(つまり、thisを返します)、常にクラスと同じ名前を持ちます。かではない - 一方

initはあなたが呼び出すことができ、通常の方法、です。どんな種類の "init"メソッドに対しても普遍的に合意されたコンセンサスはありません。だから、それはあなたがしたいことにかかっています。 newがロジックを呼び出すことを確認したい場合は、コンストラクタを使用します。あなた自身のものを持っている場合は、プレーンな方法を使用してください。あなたは、あなたのクラスがどのように使用されるべきかについて、という良い文書を書いてください。

関連する問題