class TestMe{
public static void main (String args[]){
String s3;
System.out.print(s3);
}
}
爲什麼編譯器給出錯誤,refernce對象的默認值爲null,爲什麼它不是輸出...... ??java中string的初始化是否必要...?
error: variable s3 might not have been initialized
class TestMe{
public static void main (String args[]){
String s3;
System.out.print(s3);
}
}
爲什麼編譯器給出錯誤,refernce對象的默認值爲null,爲什麼它不是輸出...... ??java中string的初始化是否必要...?
error: variable s3 might not have been initialized
局部變量應該初始化使用它們之前,本地變量不要在Java中獲得的默認值,因此您string s3
沒有得到默認值零,因爲它是一個局部變量,因此編譯器錯誤。
FOM JLS:
如果聲明符不具有初始化表達式,然後每 參考變量必須由 分配的執行前面的變量,或編譯時錯誤發生時由§16的規則 。
是的,這是必要的。
String s3;
s3 = "Something....";
System.out.print(s3); // prints "Something..."
在使用本地變量之前,必須初始化它。
這是一個錯誤,因爲JLS說,所以在§14.4.2. Execution of Local Variable Declarations:
如果說明符沒有初始化表達式,然後到變量中的每個引用必須由指定的執行之前的變量,或按照§16的規則發生編譯時錯誤。
我知道局部變量是什麼:
局部變量的聲明主要是爲了做一些calculation.So是程序員決定給予價值的變量,它不應該採用默認值。如果程序員錯誤地沒有初始化一個局部變量,那麼它就會使用默認值,那麼輸出就會出錯。因此局部變量會要求程序員在使用變量前進行初始化以避免出錯。
使用默認值的唯一方案是相關變量是對象的字段或數組的組件即使是本地的情況。實際上,數組總是使用適當的默認值初始化它們的單元格。
因此,在你的情況下,你的變量不是來自一個字段(因爲是本地的方法),並沒有參與數組的初始化。因此,編譯器邏輯上抱怨..
我改變了類的名稱,否則它可能會出現問題,如果你的類被稱爲'Java'' – doniyor
[Java中的未初始化類成員不會發出任何編譯器錯誤。但是局部變量的確如此爲什麼(HTTP://計算器。com/questions/8521917/uninitialized-class-members-in-java-do-not-issue-any-compiler-errors-local-vari) – Lion