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

从您的代码片段中,我假设您认为您正在尝试执行以下操作:

  • 声明一个项目数组
  • 用 Toy 对象初始化前两项
  • 获取数组的第一项并打印

代码中的问题是:

  • 您将项目数组声明为static字段
  • 您有一个实例初始化块,您可以在其中初始化数组
  • 您有一个主要功能,您可以在其中获取项目并打印它

问题是初始化块是在初始化实例时完成的。然而,主要方法是一种static方法,没有实例。因此该块还没有被调用,你得到了一个 NPE。

您还需要像这样制作初始化块static

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

初始化类时调用一次static初始化块。因此,在 main 运行之前调用它。

于 2012-04-27T06:26:29.030 回答