1

这是Element类:

public class Element {

    private String elementName;
    private int atomicNumber;
    private String Symbol;
    private double atomicWeight;

    public Element()
    {

    }

    public String getElementName()
    {
        return elementName;
    }
    public int getAtomicNumber()
    {
        return atomicNumber;
    }
    public String getSymbol()
    {
        return Symbol;
    }
    public double getAtomicWeight()
    {
        return atomicWeight;
    }
    public void setElementName(String elementName)
    {
        this.elementName = elementName;
    }
    public void setAtomicNumber(int atomicNumber)
    {
        this.atomicNumber = atomicNumber;
    }
    public void setSymbol(String Symbol)
    {
        this.Symbol = Symbol;
    }
    public void setAtomicWeight(double atomicWeight)
    {
        this.atomicWeight = atomicWeight;
    }

}

我正在尝试参加Array这个课程,这是我的mainU.java课程:

public class mainU {

    public static void main(String[] args){     

            Element[] element = new Element[103];

        element[0].setElementName("H");
        String s = element[0].getElementName();

        System.out.println(s);

}

问题是我收到了这个错误:

Exception in thread "main" java.lang.NullPointerException
    at mainU.main(mainU.java:14)

任何人都可以告诉我我收到这样一个错误的原因吗?我使我的程序尽可能简单,以便您能够帮助我。

4

8 回答 8

2

问题在于:

Element[] element = new Element[103];
element[0].setElementName("H");

您访问第一个元素而不在此之前创建它。您创建了数组,但它不会自动包含所使用类型的新对象,您必须明确声明这些对象,例如:

element[0] = new element();

然后你就可以使用这个对象了。

于 2013-01-10T12:39:29.607 回答
1

创建新的对象数组将产生用null. 如果您需要拥有对象,则必须在创建数组后对其进行迭代并用新实例填充它。

于 2013-01-10T12:35:50.797 回答
1

您需要创建对象。您刚刚创建了对象引用数组。

Element[] element = new Element[103];
for(int i=0; i<103; i++) {
   element[i] = new Element();
}

由于您的元素是对象(数组是对象)并且它存储在堆上。所有 Element 对象引用都初始化为空值。因此,您将获得NPEs。

Element[] element = new Element[103];
element[0].setElementName("H");  // element[0] is null
于 2013-01-10T12:35:57.530 回答
1

您只初始化了元素数组,但从未初始化其元素,

        Element[] element = new Element[103];
    element[0].setElementName("H");// this cause NPE as element[0] is null

您需要初始化如下元素:

      Element[] element = new Element[103];
       element[0] = new Element();
      element[0].setElementName("H");
于 2013-01-10T12:36:11.210 回答
1

像声明数组一样初始化数组对象,但不会初始化数组的元素。您需要在数组的每个索引处创建一个 Element 对象。

element[0] = new Element();
element[0].setElementName("H");
于 2013-01-10T12:36:25.160 回答
1

当您创建一个对象数组时,它的所有元素都被初始化为null. 您只需创建一个新Element对象并将其添加到数组中,如下所示:

Element[] elems = new Element[100];
elems[0] = new Element();
elem[0].setElementName("asdf");
于 2013-01-10T12:37:31.173 回答
1

你还没有初始化element[0]。您需要首先初始化它,如果您打算使用它们,实际上是每个数组元素。

element[0]=new Element();

或者您可以使用循环初始化所有这些

  for(int i=0;i<element.length;i++)
  {
    element[i]=new Element();
  }
于 2013-01-10T12:38:02.183 回答
0

在这两行之间

 Element[] element = new Element[103];
 element[0].setElementName("H");

你需要创建element[0],也就是构建一个新的实例Element。在您的代码element[0]中为空,因此NullPointerException当您调用setElementName.

于 2013-01-10T12:36:08.957 回答