我写了下面这个程序,目的是为定义如何循环类变量。下面的程序编译通过了,可是运行却出现了这样的错误“Exception in thread "main" java.lang.NullPointerException at Student.main(Student.java:11) 
”。       
恳请高手指教,不盛感激! public class Student { 
void display(){ 
System.out.println("welcome!"); 

     
    public static void main(String[] args) { 
        int i; 
        Student a[]= new Student[5]; 
        for(i=0;i<5;i++) 
        a[i].display(); 
        
    } 
}  
 
 

解决方案 »

  1.   

    Student a[]= new Student[5];
    你在这里只声明了一个数组,而此时数组中的元素为null
    下面你就a[i].display();
    相当于null.display(),这当然会出错。
      

  2.   

    这个问题跟循环变量没关系,你需要学习:
    1, default value for primitive variables;
    2, default value for reference variables;
    3, default value for array elements after array declaration and initialization;
      

  3.   

    感谢brooksychen(初晨之阳) ,z_lping(Schemer) 两位教导.
    Student  a[]=  new  Student[5];
    这个语句难道不是定义了类Student的五个实例a[0]到a[4]吗?如果不是那应该怎样改正呢?
    我写这个简单的程序目的的不想这样烦琐定义类Student的对象:
    Student stu1=new Student();
    Student stu2=new Student();
    ....
    Student stun=new Student();
    希望大家不吝教导!
      

  4.   

    楼主的代码还是带有比较明显的C/C++的痕迹的。JAVA中一般这样写:Student[] a= new Student[5]; 
    for(int i=0; i<5; i++) {
      a[i] = new Student();
      a[i].display();
    }JAVA中的数组初始化时,所有元素都是null,访问前必须逐个赋值。
      

  5.   

    Student  a[]=  new  Student[5];
    这个语句难道不是定义了类Student的五个实例a[0]到a[4]吗?如果不是那应该怎样改正呢?
    我写这个简单的程序目的的不想这样烦琐定义类Student的对象:
    Student stu1=new Student();
    Student stu2=new Student();
    ....
    Student stun=new Student();
    希望大家不吝教导!
    -----------------------------Student数组的定义和Student对象的定义是两回事情
    Student  a[]=  new  Student[5];只是定义了一个大小为5的数组,数组元素的类型为Student,但每个元素具体是什么,仅凭这句话并不知道,还需要单个指定,就像楼上的代码那样。这个可能不好理解,那换个例子:
    int[] ia = new int[5];
    这句话只是定义了一个长度为5的整型数组,但数组元素的值是什么?你并没有给数组元素赋值,所以现在数组元素“没有值”。但Java中对于这样的情况会给个初始值,这个例子中,如果你紧接着输入ia每个元素的值,会发现都是0,这就是默认值。而对于你帖子中的例子,默认值是null。
      

  6.   

    我终于明白了,看来自己java的基础打的不牢,感谢Dan1980() 和brooksychen(初晨之阳)两位朋友的教导,尤其是感谢brooksychen(初晨之阳)朋友的再次教导,你们好厉害啊!