跨类返回Integer类型ArrayList取特定值时报空指针异常如何解决
问题原因
你代码抛出空指针异常的核心原因是ReadFile类的成员变量height没有被正确初始化,属于变量作用域错误:
- 在ReadFile的构造方法中,你重新声明了一个和成员变量同名的局部
height变量,你所有的赋值操作都作用在了这个只在构造方法内部生效的局部变量上,类的成员变量height始终保持默认值null - 当你调用
getHeights()方法时,返回的是值为null的成员变量,后续调用null的get()方法就触发了空指针异常
另外你的代码还有一个编译错误:import java.util.*末尾缺少分号,运行前需要补上。
修复方案
只需要修改ReadFile类的构造方法,去掉局部变量的类型声明,直接给成员变量赋值即可,修复后的完整代码如下:
import java.util.*; public class ReadFile { private ArrayList<Integer> height; public ReadFile() { // 去掉前面的ArrayList<Integer>类型声明,直接操作成员变量 height = new ArrayList<Integer>(); for(int x = 0; x <= 3; x++) { height.add(x); } } public ArrayList<Integer> getHeights() { return height; } }
修复后运行Jumper主类,会正确输出结果1,符合预期。
内容的提问来源于stack exchange,提问作者dino
相关产品推荐
相关产品推荐

