array作为参数传递的实例变量

时间:2012-07-30 12:44:12

标签: java arrays nullpointerexception parameter-passing

我有一个数组作为实例变量/字段的类,它从另一个类传递到这个中的第一个方法。 我的印象是我也应该能够从其他方法访问它而不将其传递给该方法,但是当我尝试时,我得到了一个N​​PE。

以下是代码:

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();

3 个答案:

答案 0 :(得分:3)

我强烈怀疑您调用memPass的实例与您稍后调用accessArray的实例不同。

如果您使用相同的实例,那应该绝对没问题。 (特别是,它是将存储的参数的,所以它不像memList在不为空之后变为null,只是由于其他地方的变化。)

答案 1 :(得分:3)

你所显示的类中的代码看起来很好,所以如果你得到一个NPEx,那么方法被调用不按顺序,或者第二个方法调用是在另一个PLoop实例上进行的。

要检查是否在同一对象上进行了调用,请尝试在方法中打印出this的值,并检查值是否相同:

System.out.println(this);

答案 2 :(得分:1)

PLoop类中的方法不是静态的 你还在打电话PLoop.accessArray();

请告诉我真正的情景是什么?

就像@Jon Skeet告诉代码似乎很好。唯一的可能是你可能 不按顺序执行它们,或者在第一个之后你可能会搞乱memLocList 方法被称为。