1

と の 2 つのクラスがMainありSub1ます。

anArrayは次のように宣言されSub1ています。

  public static int[] anArray;
  public Sub1 () {
      anArray = new int[15];

そしてSub1、私はそれを設定しようとします:

  public static void methodOne() {
      anArray[0] = 5;

しかし、コードを実行しようとするNullPointerExceptionと、メッセージが表示され、次のように指定されます。

Sub1.methodOne (Sub1.java:249)

このコードを参照するもの:

  anArray[0] = 5;

配列を変更できないのはなぜですか? それをコメントアウトしても、エラーは引き続き発生し、配列のインデックスの値を変更しようとした別の行に移動するだけです。

4

3 に答える 3

4

anArraystaticフィールドであり、そのクラスのコンストラクターで初期化しようとしても意味がありません。にしたい場合はstatic、宣言で初期化するだけです:

public static int[] anArray = new int[15];

anArrayインスタンスメンバーになるつもりである場合は、それらの修飾子methodOneを削除してください。static

anArray privateいずれにせよ、公に公開されたメソッドのみがその内容を変更できるように変数を作成し、final誤って再割り当てしないようにすることをお勧めします。

于 2012-05-19T22:58:43.417 に答える
3

次のように配列を初期化してみてください。

public static int[] anArray = new int[15];

static変数はクラスのインスタンスに固有のものではないため、デフォルトのコンストラクターで変数を初期化する意味がない場合があります (ただし、これが当てはまるかどうかを確認するには、コードをさらに確認する必要があります)。

于 2012-05-19T23:02:45.513 に答える
1

さらにコードを表示する必要がありますが、メソッドと配列は静的であり、コンストラクターで配列を初期化しています。私の推測では、どこでもコンストラクターを呼び出していないということです。

于 2012-05-19T22:58:44.393 に答える