我有一个数组作为实例变量/字段的类,它从另一个类传递到这个中的第一个方法。 我的印象是我也应该能够从其他方法访问它而不将其传递给该方法,但是当我尝试时,我得到了一个NPE。
以下是代码:
public class PLoop {
// instance variable
public Memory[] memList;
// method 1
public void memPass(Memory[] memLocList) {
memList = memLocList;
System.out.println(memList.length);
}
// method 2
public void accessArray() {
System.out.println(memList.length);
}
}
当调用第一个方法时,我得到一个打印到控制台的整数,表示数组的长度,但是当第二个方法被调用时,它是NPE,建议不是相同的数组。
通过单击GUI上的按钮调用第二种方法。与此按钮关联的方法只能按以下方式调用:
PLoop.accessArray();
任何人都可以告诉我我做错了吗?
CNC中 对这些方法的调用来自两个不同的类,每个类都声明一个PLoop实例:
proc = new PLoop();
答案 0 :(得分:3)
我强烈怀疑您调用memPass
的实例与您稍后调用accessArray
的实例不同。
如果您使用相同的实例,那应该绝对没问题。 (特别是,它是将存储的参数的值,所以它不像memList
在不为空之后变为null,只是由于其他地方的变化。)
答案 1 :(得分:3)
你所显示的类中的代码看起来很好,所以如果你得到一个NPEx,那么方法被调用不按顺序,或者第二个方法调用是在另一个PLoop实例上进行的。
要检查是否在同一对象上进行了调用,请尝试在方法中打印出this
的值,并检查值是否相同:
System.out.println(this);
答案 2 :(得分:1)
PLoop类中的方法不是静态的
你还在打电话PLoop.accessArray();
请告诉我真正的情景是什么?
就像@Jon Skeet告诉代码似乎很好。唯一的可能是你可能 不按顺序执行它们,或者在第一个之后你可能会搞乱memLocList 方法被称为。