我写了下面这个程序,目的是为定义如何循环类变量。下面的程序编译通过了,可是运行却出现了这样的错误“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();
}
}
”。
恳请高手指教,不盛感激! 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();
}
}
你在这里只声明了一个数组,而此时数组中的元素为null
下面你就a[i].display();
相当于null.display(),这当然会出错。
1, default value for primitive variables;
2, default value for reference variables;
3, default value for array elements after array declaration and initialization;
Student a[]= new Student[5];
这个语句难道不是定义了类Student的五个实例a[0]到a[4]吗?如果不是那应该怎样改正呢?
我写这个简单的程序目的的不想这样烦琐定义类Student的对象:
Student stu1=new Student();
Student stu2=new Student();
....
Student stun=new Student();
希望大家不吝教导!
for(int i=0; i<5; i++) {
a[i] = new Student();
a[i].display();
}JAVA中的数组初始化时,所有元素都是null,访问前必须逐个赋值。
这个语句难道不是定义了类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。