2

重複の可能性:
コンストラクター内またはコンストラクター外で変数を初期化する必要があります

たとえば、フィールドがありますint x。Javaは、宣言時にフィールドを初期化することを好みますか

int x = 0;

むしろコンストラクタで?

public foo() {
x = 0;
}

デザインの観点からどちらがより好ましいですか?

4

6 に答える 6

1

何が起こるかを知っている限り、どちらも良いです。

それらが初期化される順序は次のとおりです。

  1. クラスメンバー(例public int x = 0;:)
  2. コンストラクター(this.x = 0;:)

ただし、整数をゼロに初期化することはできません。Javaはこれを自動的に行います。

初期化の順序を無視するエラーを示す小さなデモ:

class Foo
{
    public String str;
    public String strTwo = "Here is str: " + str;

    public Foo()
    {
        str = "Java";
        System.out.println(strTwo);
    }
}

これは印刷されますHere is str: null

于 2012-12-28T13:22:45.047 に答える
0

プリミティブ型のインスタンス変数は暗黙的に初期化されますが、参照変数にはnull値が割り当てられます。

したがって、::のように割り当てる場合

int x=0;

すべてのオブジェクトでx=0になります。

ただし、コンストラクターの場合は、異なるコンストラクターで異なる値を使用して初期化できますが、異なるコンストラクターで異なる値を使用して初期化することはお勧めできません。

于 2012-12-28T13:21:25.760 に答える
0

Javaは、フィールドが宣言されたとき、またはコンストラクターで初期化されることを好みますか?

デフォルト値で初期化する場合、コンストラクターまたは宣言時に初期化するのは冗長です。

ただし、デフォルト値とは異なる値で初期化する場合は、デラレーションよりもコンストラクターを使用する必要があります。

設計の観点からどちらがより好ましいですか?

デザインの観点からは、まったく違いはありません。実装の詳細です。

于 2012-12-28T13:23:08.413 に答える
0

私の好みは、コンストラクターの外部でデフォルト値を初期化することです

int x=0;

複数のコンストラクターと多くのインスタンス変数がある場合、初期化を忘れないようにします。変数に特定の値が必要な場合は、コンストラクターで再初期化します。

于 2012-12-28T13:24:24.150 に答える
0

私が思い出す限り、両方のインスタンスでコンパイラによって生成されるバイトコードはほとんど同じであり、実際には好みとコーディング スタイルの問題です。個人的には、コンストラクターで変数を初期化することを好む傾向があります - コンストラクターで変数を初期化する必要がある場合 (コンストラクターに引数を渡す場合など) は、理解するために 1 か所を見ればよいことを意味します。 2ではなく、何が起こっているのか。

(補足として、あなたの例では、「int x;」を定義すると自動的に0に設定されるため、「int x = 0」を実行する必要はありません。)

于 2012-12-28T13:24:41.713 に答える
0

public foo() { x = 0; }

これは良いでしょう。この int x =0 を使用すると、すべてのオブジェクトが対象になります。ただし、コンストラクター表記は、その特定のコンストラクターによって作成されるオブジェクト用です。

于 2012-12-28T13:21:09.673 に答える