对象数组触发NullPointerException问题求助(附代码与错误栈)
问题原因及修复方案
核心错误
1. 对象数组元素未初始化
创建数组Student [] std = new Student [3];时,Java仅为数组本身分配内存空间,数组内的每个元素默认值是null——也就是没有实际创建Student实例。直接调用std[0].setName()时,因为std[0]是null,触发了NullPointerException。
2. 循环操作固定索引
循环变量是i,但代码始终操作std[0],即便修复初始化问题,也只会重复修改第一个对象,无法遍历处理整个数组的3个元素。
修复后的Main类代码
public class Main { public static void main(String[] args) throws Exception{ Student [] std = new Student [3]; for (int i = 0; i < std.length; i++) { System.out.println("student "+ (i+1)); // 先为当前索引位置创建Student对象实例 std[i] = new Student(); std[i].setName(); std[i].setMarks(); std[i].INFO(); } } }
额外优化建议
- 命名规范:Java成员变量建议用小驼峰命名,比如把
Name改为name、Marks改为marks,符合行业编码习惯。 - Scanner资源管理:Student类中声明的
Scanner in建议在使用完成后关闭,或者在Main类中统一创建Scanner并传递给Student的方法,避免资源泄漏。
内容的提问来源于stack exchange,提问作者Zaid Bakdash
相关产品推荐
相关产品推荐

