对象内部的Java数组

时间:2013-09-27 00:38:48

标签: java arrays object nullpointerexception

我正在尝试访问属于对象的数组。

我在Main.main(Main.java:24)的OrderedStringList.add(OrderedStringList.java:21)收到错误“线程中的异常”主“java.lang.NullPointerException”

我已经将我的程序削减到了骨头,切断了可能干扰输出的所有内容。

public class Main {

public static void main(String[] args) {

    int x = 5;

    OrderedStringList myList = new OrderedStringList();

    myList.add(x);
    }
} //end class

此代码引用OrderedStringList类。

public class OrderedStringList {

public int values[];

OrderedStringList(){
    int values[] = new int[5];
}

public void add(int y) {
    values[0] = y;
    System.out.print(values[0]);
}

我假设错误中的数字21和24是行号。因为我在原始代码中注释了一些内容,所以我发布的代码通常会在其中间包含一些内容。主要的第24行是:myList.add(x);。 OrderedStringList的第21行是:values[0] = y;

我猜我有一些非常简单的东西。一切都很受欢迎。

感谢。

4 个答案:

答案 0 :(得分:5)

下面

OrderedStringList(){
    int values[] = new int[5];
}

您影响了班级成员values

将其更改为:

OrderedStringList(){
    values = new int[5];
}

答案 1 :(得分:2)

你已经宣布values两次......

public int values[];

OrderedStringList(){
    int values[] = new int[5];
}
这通常称为阴影。

将构造函数中数组的初始化更改为......

public int values[];

OrderedStringList(){
    value = new int[5];
}

,而不是...

答案 2 :(得分:2)

这将在方法范围内声明values[]数组。

OrderedStringList(){
    int values[] = new int[5];
}

如果想参考Class范围使用

OrderedStringList(){
    values = new int[5];
}

答案 3 :(得分:1)

使用行int values[] = new int[5];,您将声明一个仅存在于构造函数中的全新int[]。将其更改为values = new int[5];