几个月前我开始学习自己的Java基础知识(熟悉PHP
几年的业余水平)。
为了练习,我使用了OCA Java SE 8程序员1学习指南,并给出了一个示例考试问题,这使我对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) ; {} ;
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中的允许语句。在这种情况下,if
声明只是空身并没有任何意义,但它是有效的。
来自java specification 14.6. The Empty Statement:
空语句什么都不做。 EmptyStatement:
;
执行空语句总是正常完成。
{}
只是java中允许的空代码块。