[英]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.