这段代码有什么问题? (对象数组,空指针异常。)

时间:2013-07-02 16:49:50

标签: java arrays nullpointerexception

我已经为abc类创建了一个对象数组,但只要我调用从用户那里获取数据的accept()代码,它就会给出一个空指针异常。

这是代码:

   class abc{
    int rollno,i;
    String name;
    public void accept(){
        Scanner sc=new Scanner(System.in);
        System.out.print("Enter roll no: ");
        rollno=sc.nextInt();
    }

    public void display(){
        System.out.println("Roll no: "+rollno);
    }

    public static void main(String[] gs){
        int i;
        abc a[]=new abc[10];

        for(i=0;i<10;i++){
            a[i].accept();    //This line gives null pointer exception
        }

        for(i=0;i<10;i++){
            a[i].display();
        }   
}

谁能说出问题是什么?

4 个答案:

答案 0 :(得分:5)

因为a[i]null。默认情况下不会初始化。您正在创建一个包含10个元素的引用类型abc的数组。数组中的所有元素都是null引用。在调用任何方法之前,需要为每个引用分配一个类型为abc的具体对象。

您需要在调用任何方法之前实例化对象:

for(i=0;i<10;i++)
{
   a[i] = new abc(); // instantiate it
   a[i].accept();
}

答案 1 :(得分:1)

这是因为你永远不会初始化数组中的元素。

abc a[] = new abc[10];

创建一个新数组,但它不会实例化数组中的对象。

你需要做

abc a[] = new abc[10];
for (int i = 0; i < 10; i++) {
    a[i] = new abc();
    a[i].accept();
}

答案 2 :(得分:0)

这是因为abc a[]=new abc[10];数组的所有元素都将使用空值进行初始化。每当你在null引用上调用任何方法时,它都会产生空指针异常。你可以通过添加a[i] = new abc();来初始化数组元素来使这个空的ponter异常无效

答案 3 :(得分:0)

您还没有为阵列位置分配内存,即

之前
a[i].accept(); 

你必须包括

a[i] = new abc();

&GT;&GT;如果您的答案正确无误,请记住将其标记为正确。