簡體   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