为什么我在写';'时没有收到任何警告或错误?

时间:2012-12-31 13:41:46

标签: java syntax format

我在Java代码中写了以下三行:

ArrayList<String> QuestionID = new ArrayList<String>();
;
ArrayList<String> QuestionType = new ArrayList<String>();

它可以毫无问题地编译和运行。

为什么会这样做?

我无法理解为什么我在第二行没有收到任何警告或错误。

8 个答案:

答案 0 :(得分:12)

有人认为空语句有效。这里的所有都是它的。允许空语句有时很有用,例如对于带有空体的for循环。

作为一个例子,这里是如何找到树的根节点(假设有一个父链接,并且根节点没有父节点):

for (Node parent = anyChildNode; parent.getParent() != null; parent = parent.getParent())
    ; // this for loop has no body, so an empty statement takes its place

答案 1 :(得分:4)

因为你写的是empty statement,这完全有效。

Here你会找到更多解释。

从上面的链接 -

  

此类声明的用处有限。主要用途   我能想到的是完成循环所需的语句   结构体。

     

这是我最近使用的一个例子:

     

while(sf(++ n)!= i);

     

此循环将不断调用方法sf,增加值   n直到sf(n)的返回值等于i。 Java中的每个循环   必须有一些代码在循环体中执行。在这种情况下,所有   必要的工作是在条件下完成的,所以强制循环   身体是一个空洞的陈述。

     

虽然可能有其他(更清晰)的方法来写这一点   代码,这是可以使用该空语句的示例。

答案 2 :(得分:4)

不仅允许,而且还有its own section in the JLS。正如所料:

  

空语句什么都不做。

更多:

  

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

这意味着以下代码:

;

永远不会抛出异常。很高兴知道; - )

答案 3 :(得分:1)

#if DEBUG
    #define ASSERT(_x) Assert(x)
#else
    #define ASSERT(_x)
#endif

ASSERT(test);    // Results in null statement in non-debug builds

空分号表示之前有“空语句”。这完全有效。

;表示“不执行任何操作”;

Good article关于空语句的使用

答案 4 :(得分:1)

“;”被视为没有任何指示的行代码。

没有语法错误。

答案 5 :(得分:0)

它是一个有效的语句,类似于指示编译器什么都不做。

答案 6 :(得分:0)

来自C的空语句来自Java,你可以发现它对于像

这样的东西非常有用
strcpy(char *s, char *t) {
    while(*s++ = *t++);
}

答案 7 :(得分:0)

Empty Semi Colon是JAVA中的有效令牌,它表示空语句。