2012-01-10 173 views
5

以下方法無法在Java中執行,因爲變量i在使用時可能保持未初始化狀態。這是語法還是語義問題?語法或語義問題?

public int odd(boolean b){ 
    int i; 
    if(b){ i = 3;} 
    return i; 
} 

我原以爲這會是語義,但根據我的指導,它是一個語法錯誤。這是正確的,爲什麼?

+0

那麼,它爲什麼重要?也不會讓你工作的代碼。 – Piskvor 2012-01-10 13:08:31

+1

它與編譯器優化有關,編譯器發現可能無法訪問的代碼,如 – 2012-01-10 13:11:48

回答

8

這是Java編譯器檢測到的錯誤,但它是而不是的語法錯誤;根據Java語法,它是完全有效的。它在分析的後期階段被檢測到,使其成爲語義錯誤。這就是說,這聽起來像你的老師想要將任何編譯器錯誤定義爲語法錯誤,並且可能希望「語義錯誤」意味着在運行時出錯。由於教師對作業進行評分,你不得不接受他的定義(即使他們完全錯誤,就像在這種情況下一樣))。

+0

非常感謝您的回答! – Adeeb 2012-01-10 13:15:03

0

Java具有用於聲明局部變量的嚴格定義的語法,並且在您的代碼示例中,您沒有遵循它。

所以在Java中,它成爲語法錯誤。

是指這樣的:http://c2.com/cgi/wiki?SyntaxVsSemantics

這:http://wiki.answers.com/Q/What_are_the_Differences_between_syntax_and_semantic_error

+0

Java語法的哪部分被違反? – 2012-01-10 13:12:02

+1

這是我見過的c2上*最糟糕的頁面。什麼胡言亂語! – 2012-01-10 13:12:54

+0

@DaveNewton:局部變量未正確定義。 – Azodious 2012-01-10 13:13:38