22

クラス内の変数に値を割り当てようとすると、メソッドの外でエラーが発生します。

class one{
 Integer b;
 b=Integer.valueOf(2);
}

ただし、作成中に初期化すると機能します。

class one{
 Integer b=Integer.valueOf(2);
}

メソッド内では、どちらの場合も機能します。

4

7 に答える 7

28

あなたがする必要があります

class one{
 Integer b;
 {
    b=Integer.valueOf(2);
 }
}

ステートメントはコードのブロックに表示される必要があるためです。

この場合、ブロックはすべてのコンストラクター(この場合はデフォルトのコンストラクター)に追加される初期化super()ブロックです。これは、コンストラクターのコードのメインブロックへの呼び出しの後、その前に実行されます。

static { }ところで:クラスが初期化されるときに呼び出される静的な初期化ブロックを持つことができます。

例えば

class one{
 static final Integer b;

 static {
    b=Integer.valueOf(2);
 }
}
于 2012-08-21T20:27:44.330 に答える
17

割り当てステートメントであり、ステートメントはコードのブロック内でのみ許可されるため(メソッド、コンストラクター、静的初期化子など)

これら以外では、宣言のみが許可されます。

これ :

  class one{
        Integer b=Integer.valueOf(2);
  }

イニシャライザを使用した宣言です。だから受け入れられます

于 2012-08-21T20:27:37.493 に答える
1

Javaでは、クラスを定義するときに、デフォルト値を使用して変数を定義し、メソッドを追加できます。実行可能コード(割り当てなど)はすべてメソッドに含まれている必要があります。

于 2012-08-21T20:26:15.010 に答える
1

これはJavaの仕組みであり、クラス内に非宣言コードを追加することはできません(申し訳ありませんが、正しい用語がわかりません)。そのコードはメソッド内にある必要があります。

于 2012-08-21T20:26:21.017 に答える
1

より一般的な答えは、クラス本体はステートメントではなく宣言に関するものであるということです。クラス本体で発生するステートメントには特別な規定がありますが、クラス初期化子またはインスタンス初期化子として明示的にマークする必要があります。

于 2012-08-21T20:58:49.427 に答える
0

用語的には、他のいくつかの答えは少しずれていると思います。宣言もステートメントです。実際、これらは「宣言ステートメント」と呼ばれ、3種類のステートメントの1つです。代入ステートメントは「式ステートメント」の1つの形式であり、メソッド、コンストラクター、初期化子などの構成でのみ使用できます。このOracleのチュートリアルリンクの「ステートメント」セクションを確認してください。

于 2014-06-24T18:31:31.257 に答える
0

メソッドには、メンバー変数に対してミューテーションを実行する責任があります。メンバー変数を初期化する必要がある場合、javaは、構築中、クラス定義(後者の場合)中にそれを行う方法を提供します。ただし、定義中にミューテーションを実行することはできません(前のケース)。これは通常、メソッドレベルで行われます。

オブジェクトは状態を保持することを目的としていますが、メソッドはその状態を操作することを目的としています。

于 2014-06-25T03:03:01.770 に答える