我有两个这样的课程:
class test1{
String var1;
String var2;
String var3;
String var4;
arrayX[] array;
public void create(int size){
arrayX[] array = new arrayX[size]
}
}
class test2{
String var5;
String var6;
}
然后我有两种方法:
void firstMeth(){
test1[] test1obj = new test1[5];
for(int q = 0 ; q <= 5 ; q++){
test1obj[q - 1] = new test1();
}
}
void secondMeth(){
test1obj[0].create(5);
test1obj[0].array[0].var5 = "Hello";
test1obj[0].array[1].var5 = "Super";
test1obj[0].array[3].var5 = "night";
}
问题在于方法&#34; secondMeth&#34;因为当我尝试作出例如: test1obj [0] .array [0] .var5 =&#34;你好&#34 ;;
我收到错误:无法在null对象上调用methos getAt()。 你知道我做错了什么吗?我应该改变什么?
提前致谢!
答案 0 :(得分:3)
public void create(int size) {
arrayX[] array = new arrayX[size];
}
这将创建一个本地数组,而不是在对象级别初始化该数组。要更正它,请使用
public void create(int size) {
this.array = new arrayX[size];
}
编辑:要解决第二个问题,在Java中创建数组不会将每个元素都填充为对象。与C ++不同,Java中的对象数组只是一个指针数组。您需要将每个数组元素初始化为一个对象,如下所示:
public void create(int size) {
this.array = new arrayX[size];
for (int i = 0; i < this.array.length; i++) {
this.array[i] = new test2();
}
}
Java的默认访问级别也是“包”,不公开。因此,如果您的调用类与您的类不在同一个包中,则可能需要定义var5和var6 public。