这是我的主要代码:
Scanner input= new Scanner(System.in);
Student[] starray=new Student[5];
for (int i=0; i<3; i++)
{
System.out.println("enter:");
starray[i].name=input.next();
System.out.println("enter:");
starray[i].family=input.next();
System.out.println("enter:");
starray[i].sid=input.nextInt();
}
for(int i=0; i<3; i++)
System.out.println(starray[i].name);
我有一节课:
String name,family;
Integer sid;
Student(){
name="kh";
family="kh";
sid=0;}
当我运行它时有以下异常: 线程&#34; main&#34;中的例外情况显示java.lang.NullPointerException at testcodes.TestCodes.main(TestCodes.java:19) Java结果:1
答案 0 :(得分:5)
Student[] starray = new Student[5];
只创建容器。该容器中的每个元素都是null
。
您需要依次创建每个。在你的循环中,考虑
starray[i] = new Student();
更好的是,为Student
构建强类型构造函数,将名称等作为参数。这有助于提高程序的稳定性。
答案 1 :(得分:0)
这种情况下的Java与C ++非常相似。在C ++中,当你声明一个对象数组时,它们仍然没有被初始化(这里面没有真正的对象),换句话说,数组只是对象的占位符。
所以你的陈述
Student[] starray = new Student[5];
以视觉形式可以
starray --> +------+------+------+------+------+
| null | null | null | null | null |
+------+------+------+------+------+
在此声明之后
starray[0] = new Student();
将是
starray --> +------+------+------+------+------+
| | null | null | null | null |
+---|--+------+------+------+------+
|
v
+------------------+
| Student Instance |
+------------------+