繁体   English   中英

数组作为实例变量作为参数传递

[英]array as instance variable passed as parameter

我有一个带有数组的类作为实例变量/字段,它从另一个类传递到该实例中的第一个方法。 我的印象是,我也应该能够从另一种方法访问它,而不必也将其传递给该方法,但是当我尝试时,我得到了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();

谁能告诉我我在做什么错?

-EDIT-对这些方法的调用来自两个不同的类,每个类都声明一个PLoop实例:

proc = new PLoop();

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

如果您使用的是同一个实例,那应该没问题。 (尤其是要存储的参数的 ,所以这并不memList可以在不为null后仅由于其他地方的更改而变为null。)

您所显示的类中的代码看起来不错,因此,如果获取的是NPEx,则要么顺序调用方法,要么在与第一个PLoop不同的实例上进行第二个方法调用。

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

System.out.println(this);

PLoop类中的方法不是静态的。您仍然在调用PLoop.accessArray();

你能告诉我真正的情况是什么吗?

就像@Jon Skeet告诉代码似乎很好一样,唯一的可能是您可能不按顺序执行它们,或者在调用第一个方法后可能会混淆memLocList。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM