-1

我已经为 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

4 回答 4

5

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

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

for(i=0;i<10;i++)
{
   a[i] = new abc(); // instantiate it
   a[i].accept();
}
于 2013-07-02T16:51:39.403 回答
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();
}
于 2013-07-02T16:52:59.283 回答
0

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

于 2013-07-02T16:53:28.850 回答
0

您还没有为数组位置分配内存,即之前

a[i].accept(); 

你必须包括

a[i] = new abc();

>> 如果你发现我的答案是正确的,请记得标记它是正确的..

于 2013-07-02T16:54:59.407 回答