提问人:dino 提问时间:10/8/2021 最后编辑:Arun Sudhakarandino 更新时间:10/8/2021 访问量:208
从另一个类返回 Integer Array List 在获取特定值时返回 null 指针异常
Returning Integer Array List from another class returns null pointer exceptions when getting specific value
问:
Java 新手,需要一些指针
我正在尝试在一个类中创建一个数组列表,然后返回它并在单独的主类中遍历其值。但是,当我使用 get 方法返回数组中的特定值时,它会产生空指针异常。我做错了什么?
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;
}
}
主类
import java.util.*
public class Jumper
{
private ReadFile readFile;
public Jumper()
{
readFile = new ReadFile();
}
public static void main(String[] arg)
{
Jumper game = new Jumper();
System.out.println(game.readFile.getHeights().get(1));
}
}
答:
0赞
Erik Lumme
10/8/2021
#1
这条线是问题所在
ArrayList<Integer> height = new ArrayList<Integer>();
您不是为成员字段赋值,而是创建一个仅存在于构造函数中的新变量。height
height
你应该改为做,类似于你用 .height = new ArrayList<Integer>();
readFile
P.S:具有与成员字段同名的局部变量称为“变量阴影”。根据您使用的 IDE,它可能会警告您,因为这不是一个罕见的错误。
0赞
Arun Sudhakaran
10/8/2021
#2
请将此行更改为 的构造函数内部。发生的情况是两个引用是不同的。ArrayList<Integer> height = new ArrayList<Integer>();
height = new ArrayList<Integer>();
ReadFile
height
在此代码中
public ReadFile() {
ArrayList<Integer> height = new ArrayList<Integer>();
for(int x = 0; x <= 3; x++) {
height.add(x);
}
}
是构造函数的本地函数,因此只有它被初始化并且保持 null,这就是导致异常的原因。height
ReadFile()
private ArrayList<Integer> height;
1赞
Maurice Perry
10/8/2021
#3
您正在声明一个名为 :height
private ArrayList<Integer> height;
然后你要声明一个局部变量,也命名为:height
public ReadFile()
{
ArrayList<Integer> height = new ArrayList<Integer>();
您在构造函数中执行的所有操作都是在局部变量上完成的,而在字段上不执行任何操作。height
评论