簡體   English   中英

在類中訪問數組時出現NullPointerException

[英]NullPointerException when access to array in class

我是這個論壇和Java的新手。 下面的代碼編譯但是當我嘗試為變量輸入一個值時,我得到NullPointerException。 怎么了?

class output_harm
{
    public int[] timestamp;
    public int[] state;

    public output_harm(){
        timestamp = new int[8];
        state = new int[8];
    }
}

output_harm[][] outputs =  new output_harm[7][6];   

outputs[0][0].state[0] = 0; //java.lang.NullPointerException

問題 output_harm [] [] outputs = new output_harm [7] [6];

這只是初始化一個數組。 當你調用構造函數output_harm()時,它只會進行初始化。 state = new int [8]; 這里的狀態在構造函數中初始化並導致NullPointerException。

解決方案:首先,您需要為每個output_harm初始化一個對象(如果您需要初始化整個數組)

output_harm[][] outputs =  new output_harm[7][6];   
    for(int i=0;i<7;i++){
        for(int j=0;j<6;j++){
            outputs[i][j] = new output_harm();
        }
    }

    outputs[0][0].state[0] = 1;

執行output_harm[][] outputs = new output_harm[7][6]而不初始化值,所有值都將設置為default,即null

你需要添加:

outputs[0][0]=new output_harm();

然后你可以這樣做:

outputs[0][0].state[0] = 0;

排隊

outputs[0][0].state[0] = 0; //java.lang.NullPointerException

您的outputs[0][0]為空,因此您無法對null執行任何操作,因此這是NPE的根本原因。

請確保在該行之前創建該對象,因此只需在此之前粘貼,如下所示:

outputs[0][0] = new output_harm();

在你的行

output_harm[][] outputs =  new output_harm[7][6];   

你剛剛初始化了你的數組,該數組到目前為止還沒有包含任何值。

之后你打來電話

outputs[0][0].state[0] = 0;

這將導致您進入NullPointerException

在數組初始化之后,它包含默認值( 對於你的數組類型[ output_harm ]它將為null )並且你在null上調用一個變量,它會拋出NullPointerException

所以,首先你必須初始化你正在使用的數組索引,在你的情況下,做

outputs[0][0] = new output_harm();

然后outputs[0][0].state[0] = 0;

只是一個指針供你工作。

  output_harm[][] outputs =  new output_harm[7][6];   
  outputs[0][0] =  new output_harm();
  outputs[0][0].state[0] =  0;
  outputs[0][0].state[1] =  1;

定義數組意味着現在output_harm not null

output_harm[][] outputs =  new output_harm[7][6];   

outputs[0][0].state[0] = 0; //java.lang.NullPointerException

正在考慮第一個尚null指數。 所以它將是nullPointerException

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM