为什么我在java中有这个异常:线程“main”中的异常java.lang.NullPointerException

时间:2014-12-05 16:57:56

标签: java arrays for-loop nullpointerexception

这是我的主要代码:

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

2 个答案:

答案 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 |
            +------------------+