簡體   English   中英

大括號和分號 if 語句上的編譯器行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM