2014-10-30 31 views
2

爲什麼下面的代碼給出編譯錯誤?Java代碼編譯錯誤如果不使用大括號if if

if (true) 
    int p=10; 

以下類似的代碼可如果我使用塊:

if (true) { 
    int p=10; 
} 

我使用Eclipse IDE中。請讓我知道爲什麼我們不能做第一個的確切原因。

+0

如果你沒有,如果括號的語句,然後它不能在代碼,即引用聲明的變量是unreachable.so也沒用宣佈這一variable.Compiler是足夠聰明的識別這種情況,並拋出編譯器錯誤以防止it.So你需要在變量聲明周圍有{}。檢查這更多信息。http://stackoverflow.com/questions/23081428/java-declare-a-variable-in-an-if-statement-without-curly-braces – 2014-10-30 07:13:40

回答

9

你不能聲明一個沒有範圍的變量。因此,您需要使用大括號以聲明p

如果在if語句之外聲明瞭p,那麼您可以在if語句中爲其賦值,而不使用大括號。

int p; 
if (true) 
    p = 10; 
+2

但默認情況下,它是在範圍內If語句....所以爲什麼編譯器不理解其含義..因爲雖然在代碼中它除了intialaztion之外工作正常 – 2014-10-30 07:02:51

+2

因爲如果語句不創建範圍。大括號。 – 2014-10-30 07:04:41

+0

@VISHNUGARG這不是編譯器在這裏「理解」任何東西的問題 - 要求局部變量立即存在於一個塊(或多個花括號)中是標準的一致性,參見JLS 14.4 – jdphenix 2014-10-30 07:05:08