我认为我犯了一个非常基本的错误,但在玩了一个小时之后,我无法解决这个问题。我在一个方法中创建一个数组并尝试在main方法中调用它,但是当从main方法引用数组时,我一直得到一个空指针异常。我的班级是:
public class test {
public static String[][] Data;
public static void createArray() {
System.out.println("Test 2");
String[][] Data = new String[2][4];
Data[0][0] = "13CG43"; //CD ID
Data[0][1] = "POP"; //Type
Data[0][2] = "12.99"; //Price
Data[0][3] = "5"; //Stock
//Second row
Data[1][0] = "293DD3"; //CD ID
Data[1][1] = "HIP"; //Type
Data[1][2] = "14.99"; //Price
Data[1][3] = "2"; //Stock
}
public static void main(String[] args) {
try {
System.out.println("Test1");
createArray();
System.out.print("Test3 " + Data[0][0]);
} catch(Exception e) {
System.out.println("Error");
}
}
}
谢谢,
答案 0 :(得分:7)
public static void createArray() {
System.out.println("Test 2");
Data = new String[2][4];
Data[0][0] = "13CG43"; //CD ID
Data[0][1] = "POP"; //Type
Data[0][2] = "12.99"; //Price
Data[0][3] = "5"; //Stock
//Second row
Data[1][0] = "293DD3"; //CD ID
Data[1][1] = "HIP"; //Type
Data[1][2] = "14.99"; //Price
Data[1][3] = "2"; //Stock
}
您在方法中声明了一个新的局部变量,而不是修改全局变量。
答案 1 :(得分:4)
那是因为数组声明它在函数调用中。将它放在外面,在返回createArray函数后数据仍然可用。
变化:
String[][] Data = new String[2][4];
带
Data = new String[2][4];
您在createArray函数范围内重新声明了Data数组。所以你的程序中有2个数据数组。一个全局函数和一个函数本地函数,隐藏全局函数。最新的,即您正在初始化的数组,将在返回createArray函数后被销毁。