Java数组对象和空指针异常的问题

问题要求:
创建若干个学生对象,输入学生的姓名、学号、成绩,并将学生信息打印
报错代码

        Scanner scanner = new Scanner(System.in);
        System.out.println("输入多少个学生的信息?");
        Student[] students = new Student[scanner.nextInt()];
        for (int i = 0; i < students.length; i++) {
    
    
            //输入学生的姓名、学号、成绩
            System.out.println("输入第"+(i+1)+"个学生的信息");
            
            System.out.print("输入姓名");
            students[i].setName(scanner.next());
            System.out.print("输入id");
            students[i].setId(scanner.nextInt());
            System.out.print("输入成绩");
            students[i].setScore(scanner.nextInt());
        }
        for (int i = 0; i < students.length; i++) {
    
    
            System.out.println(students[i].toString());
        }

以上代码输运行完输入姓名之后会报空指针异常,其原因在于我们虽然创建了对象数组,但是没有对其进行了初始化。

注意: 这里只是给对象数组进行了初始化,并没有对该对象进行初始化。
例如:

Student[] students=new Student[10];

students 是对象数组名,它所表示该数组中一共有10个元素,每一个元素都是Student类的对象名,只是对象名,并没有实例化,所以还必须为每一个元素实例化。

在上面的代码中没有对每一个元素进行实例化,你没有实例化就没有自己的内存空间,没有私人空间干啥都不好干嘛!所以这个对象就开始罢工,先给你来一手空指针异常,对象嘛,是要哄的,哄着哄着不就好了,你要声明我就给你声明,你要私人空间我就给你空间嘛,当然了,这里有十个对象,怎么着也得雨露均沾!要不然但凡有一个闹起来就不好受了


修改后的代码

for (int i = 0; i < students.length; i++) {
    
    
            //输入学生的姓名、学号、成绩
            System.out.println("输入第"+(i+1)+"个学生的信息");
            students[i] = new Student();
            System.out.print("输入姓名");
            students[i].setName(scanner.next());
            System.out.print("输入id");
            students[i].setId(scanner.nextInt());
            System.out.print("输入成绩");
            students[i].setScore(scanner.nextInt());

        }

猜你喜欢

转载自blog.csdn.net/heart_is_broken/article/details/121367960