类的数组NullPointerException

时间:2013-01-10 12:33:51

标签: java

这是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)

任何人都可以告诉我我遇到这样的错误的原因? 我让我的程序尽可能简单,以便你能够帮助我。

8 个答案:

答案 0 :(得分:2)

问题在于:

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

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

element[0] = new element();

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

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

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

答案 3 :(得分:1)

你只是初始化了Element Array但从未初始化过它的元素,

        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");

答案 4 :(得分:1)

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

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

答案 5 :(得分:1)

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

Element[] elems = new Element[100];
elems[0] = new Element();
elem[0].setElementName("asdf");

答案 6 :(得分:1)

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

element[0]=new Element();

或者您可以使用循环

初始化所有这些
  for(int i=0;i<element.length;i++)
  {
    element[i]=new Element();
  }

答案 7 :(得分:0)

在这两行之间

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

您需要创建element[0],即构建Element的新实例。在您的代码中element[0]为空,因此当您致电NullPointerExceptionsetElementName