0

コードで

package items;

public class itemtest {

static itemobject[] item = new items[10];
    {
    items[0] = new Toy("Example ID","Example Desc");
    items[1] = new Toy("Second Example ID", " Second Example Desc");
    }

    public static void main(String[] args) 
{
String tid = items[0].exampleiD;
 System.out.print(tid);
}
}

エラーが発生します:

Exception in thread "main" java.lang.NullPointerException at items.itemtest.main(itemtest.java:17)

コード行:String tid = item[0].exampleID;

申し訳ありませんが、私はJavaを初めて使用します。誰かが、私が間違っていることに光を当てることができますか?

4

2 に答える 2

2
 {
    items[0] = new Toy("Example ID","Example Desc");
    items[1] = new Toy("Second Example ID", " Second Example Desc");
 }

このブロックの前に単語staticを付けて、クラスがロードされたときに有効にする必要があります。これは、コードに基づいて実際に発生させたいことですitemobject。あなたのコードで。

于 2012-04-27T02:03:39.010 に答える
0

コード スニペットから、次のことをしようとしていると思われると思います。

  • アイテムの配列を宣言する
  • 最初の 2 つの項目を Toy オブジェクトで初期化する
  • 配列の最初の項目を取得して出力します

コードの問題は次のとおりです。

  • items 配列をstaticフィールドとして宣言します
  • 配列を初期化するインスタンス初期化ブロックがあります
  • アイテムを取得して印刷するメイン関数があります

問題は、インスタンスの初期化時に初期化ブロックが実行されることです。ただし、メイン メソッドはstaticメソッドであり、インスタンスはありません。したがって、ブロックはまだ呼び出されておらず、NPE が発生します。

static初期化ブロックも次のようにする必要があります。

static {
    items[0] = new Toy...
    items[1] = new Toy...
} 

static初期化ブロックは、クラスが初期化されるときに 1 回呼び出されます。そのため、メインが実行される前に呼び出されます。

于 2012-04-27T06:26:29.030 に答える