使用代码
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很新,有人能说清楚我做错了吗?
答案 0 :(得分:2)
{
items[0] = new Toy("Example ID","Example Desc");
items[1] = new Toy("Second Example ID", " Second Example Desc");
}
你需要在这个块之前加上单词static
才能让它在加载类时生效 - 这是你实际想要发生的事情,基于你的代码 - 而不是新的创建了itemobject
的实例,这在您的代码中永远不会发生。
答案 1 :(得分:0)
从您的代码段我假设您认为您正在尝试执行以下操作:
代码中的问题是:
static
field 问题是初始化块是在实例的初始化时完成的。然而,主要方法是static
方法,没有实例。因此,该块尚未被调用,您将获得NPE。
你需要像static
一样制作初始化块:
static {
items[0] = new Toy...
items[1] = new Toy...
}
初始化类时,将调用static
初始化块一次。这样就可以在main运行之前调用它。