我正在尝试访问属于对象的数组。
我在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;
。
我猜我有一些非常简单的东西。一切都很受欢迎。
感谢。
答案 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];
。