以下方法無法在Java中執行,因爲變量i
在使用時可能保持未初始化狀態。這是語法還是語義問題?語法或語義問題?
public int odd(boolean b){
int i;
if(b){ i = 3;}
return i;
}
我原以爲這會是語義,但根據我的指導,它是一個語法錯誤。這是正確的,爲什麼?
以下方法無法在Java中執行,因爲變量i
在使用時可能保持未初始化狀態。這是語法還是語義問題?語法或語義問題?
public int odd(boolean b){
int i;
if(b){ i = 3;}
return i;
}
我原以爲這會是語義,但根據我的指導,它是一個語法錯誤。這是正確的,爲什麼?
這是Java編譯器檢測到的錯誤,但它是而不是的語法錯誤;根據Java語法,它是完全有效的。它在分析的後期階段被檢測到,使其成爲語義錯誤。這就是說,這聽起來像你的老師想要將任何編譯器錯誤定義爲語法錯誤,並且可能希望「語義錯誤」意味着在運行時出錯。由於教師對作業進行評分,你不得不接受他的定義(即使他們完全錯誤,就像在這種情況下一樣))。
非常感謝您的回答! – Adeeb 2012-01-10 13:15:03
Java具有用於聲明局部變量的嚴格定義的語法,並且在您的代碼示例中,您沒有遵循它。
所以在Java中,它成爲語法錯誤。
是指這樣的:http://c2.com/cgi/wiki?SyntaxVsSemantics
這:http://wiki.answers.com/Q/What_are_the_Differences_between_syntax_and_semantic_error
Java語法的哪部分被違反? – 2012-01-10 13:12:02
這是我見過的c2上*最糟糕的頁面。什麼胡言亂語! – 2012-01-10 13:12:54
@DaveNewton:局部變量未正確定義。 – Azodious 2012-01-10 13:13:38
那麼,它爲什麼重要?也不會讓你工作的代碼。 – Piskvor 2012-01-10 13:08:31
它與編譯器優化有關,編譯器發現可能無法訪問的代碼,如 – 2012-01-10 13:11:48