大括号和分号if语句的编译器行为

时间:2019-03-31 12:17:10

标签: java if-statement curly-braces

几个月前,我开始学习自己的 Java基础知识(几年来对PHP熟悉的业余水平)。

为了练习,我使用了 OCA Java SE 8程序员1学习指南,并给出了一个示例考试题,使我对{{ 1}},无法在 Java文档中找到。

我不明白为什么允许回答 E 并进行编译。
我曾在Netbeans 10(JDK 11)中尝试评估警告提示,但并没有使我理解基本原理。
还尝试将要编译的多个组合(仅警告if-statement)。
Empty statement
if (true) ; {;;{}{}{}} ;;;;;;;;
if (true) ;;{}{{}{}{}}; {;;{}{}{}} ;;;;;;;;

问题:以下哪些语句不能编译?
A。 if (true) ;;{}{{}{}{}}; {;;{}{}{}}
B。 if (true) ;
C。 if (true) {}
D。 if (true) {;}
E。 if (true) {;;}
F。 if (true) ; {} ; (=正确答案)

请帮助! 预先感谢。

2 个答案:

答案 0 :(得分:2)

  

我不明白为什么允许答案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语句之后的语句。

答案 1 :(得分:0)

答案 E 将编译,因为在Java中允许使用符号;。在这种情况下,if语句的主体为空,没有意义,但这是有效的。

来自java specification 14.6. The Empty Statement

  

空语句不执行任何操作。   空声明:       ;

     

空语句的执行总是正常完成。


{}只是Java中允许的空代码块。

请参见java spec 14.2. Blocks