为什么在return语句之后,当允许其他语句时,不允许使用额外的分号?

Aru*_*ran 7 java compiler-errors return

我在分号后添加了一个额外的分号System.out.println:

System.out.println();;
Run Code Online (Sandbox Code Playgroud)

这对Java编译器来说是合法的,所以我检查了其他语句,它们都是合法的.所以当我搜索并找到这些链接时:

  1. 为什么Java在语句结尾处不显示双分号错误?
  2. 当我用两个分号结束一行时,编译器不会抱怨.为什么?
  3. 什么时候你会在一个方法关闭括号后放一个分号?
  4. 为什么连续分号的代码会编译?
  5. 分号在'if'语句结束时

我开始明白额外的分号意味着额外的空话.

但是当我在return声明后添加一个额外的分号时,我得到了编译时错误.我得出的结论是,该return声明被认为是执行流程中的最后一个声明,因此在声明之后添加一个额外的声明return是非法的.

这个代码也发生了同样的事情:

if(a == b)
    System.out.println();;
else
    System.out.println();
Run Code Online (Sandbox Code Playgroud)

if语句内部System.out.println();;给出了编译时错误,因为编译器期望elseifelse.我是对的还是还有其他原因吗?

You*_*saf 9

为什么在return语句之后不允许多个分号,何时允许所有其他语句?

只是因为当你有一个类似的陈述时

System.out.println();;
Run Code Online (Sandbox Code Playgroud)

这意味着你有两个语句,一个是,System.out.println();而另一个语句在第一个之后semi colon,它是空的并且允许但是你不能在语句之后有任何空语句或任何其他语句,return因为它永远不会执行,换句话说,它不到的语句,你不能有不可到达的语句在你的代码.

同样的事情也发生在这个代码中

if(a == b)
    System.out.println();;
else
    System.out.println();
Run Code Online (Sandbox Code Playgroud)

那是因为,当你有一个else语句时,语句就在它之前应该是if语句而不是上面代码片段中的情况,因为语句之前的else语句是empty statement不允许的.

如果您有if statement类似的括号

if(a == b) {
    System.out.println();;
}
else
   System.out.println();
Run Code Online (Sandbox Code Playgroud)

你会得到任何错误,因为现在是空的语句是内部的if block和声明之前elseif statement,而不是empty statement这是当你有后无括号的情况下if statement


归档时间:

查看次数:

1101 次

最近记录:

6 年,8 月 前