从另一个类返回 Integer Array List 在获取特定值时返回 null 指针异常

Returning Integer Array List from another class returns null pointer exceptions when getting specific value

提问人:dino 提问时间:10/8/2021 最后编辑:Arun Sudhakarandino 更新时间:10/8/2021 访问量:208

问:

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));
    }
}
java arraylist nullpointerexception

评论


答:

0赞 Erik Lumme 10/8/2021 #1

这条线是问题所在

ArrayList<Integer> height = new ArrayList<Integer>();

您不是为成员字段赋值,而是创建一个仅存在于构造函数中的新变量。heightheight

你应该改为做,类似于你用 .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>();ReadFileheight

在此代码中

public ReadFile() {

    ArrayList<Integer> height = new ArrayList<Integer>();

    for(int x = 0; x <= 3; x++) {
        height.add(x);
    }
}

是构造函数的本地函数,因此只有它被初始化并且保持 null,这就是导致异常的原因。heightReadFile()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