![](/img/trans.png)
[英]java: while loop - statement with a semicolon before going into statements between curly braces?
[英]compiler behavior on curly braces and semicolon if statement
幾個月前我開始學習自己的Java 基礎知識(在業余水平上熟悉PHP
幾年)。
為了練習,我使用了OCA Java SE 8 Programmer 1 Study Guide並給出了一個示例考試問題,它讓我對if-statement
的大括號和分號的使用感到困惑,並且無法在Java 文檔中找到。
我不明白為什么允許答案E並編譯。
我已經嘗試在 Netbeans 10 (JDK 11) 中評估警告和提示,但並沒有讓我了解基礎。
還嘗試將編譯的多個組合(僅警告Empty statement
)。
if (true) ; {;;{}{}{}} ;;;;;;;;
if (true) ;;{}{{}{}{}}; {;;{}{}{}} ;;;;;;;;
if (true) ;;{}{{}{}{}}; {;;{}{}{}}
問題:下列哪個語句不能編譯?
A. if (true) ;
B. if (true) {}
C. if (true) {;}
D. if (true) {;;}
E. if (true) ; {} ;
if (true) ; {} ;
F. All statements will compile
(=正確答案)
請幫忙! 提前致謝。
我不明白為什么允許答案
E
並編譯。
在 Java 中,一個;
可以是語句終止符或空語句,具體取決於上下文。
以下是選項E
的(有效)Java 代碼的解析方式:
if (true) // <-- "if" and its condition
; // an empty statement which is the "then" part of the "if"
{} // an (empty) block statement
; // an empty statement
前兩行是完整的if
語句。 第三行和第四行是if
語句之后的語句。
答案E會編譯,因為符號;
java 中的 is allowed 語句。 在這種情況下, if
語句只有空體並且沒有意義,但它是有效的。
來自java 規范 14.6。 空聲明:
空語句什么也不做。 空語句:
;
空語句的執行總是正常完成。
{}
只是一個在 java 中也允許的空代碼塊。
請參閱Java 規范 14.2。 塊
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.