为什么Java在语句结尾处不显示双分号错误?

时间:2012-03-03 13:22:10

标签: java java-compiler-api

我不小心写了一个带有两个分号的java语句。 java编译器没有显示任何错误,它运行。

代码:

System.out.println("Length after delete the text is "+name.length());;

出于学习目的,我尝试在分号后添加不同的字符,并且java编译器已将编译时错误显示为令牌上的语法错误“)”,删除此令牌

本声明:

System.out.println("Length after delete the text is "+name.length());)

为什么java将分号和其他字符视为不同?

6 个答案:

答案 0 :(得分:30)

因为双分号不是双分号,而是分号加空语句。并且一个没有任何作用的空语句不是错误。

答案 1 :(得分:15)

正如其他答案所述,通常第二个分号被解释为一个空的陈述,只要允许陈述,这是允许的。

实际上,有些情况下双分号确实会产生错误:

public int method() {
   return 1;;
}

当编译器确定某个位置无法访问时(这在JLS中确切定义,但在returnbreakcontinue和{{之后直接包含位置1}}),那里不允许任何陈述,甚至不是空话。

答案 2 :(得分:10)

根据Java语言标准,第二个分号是empty statement

  

空语句什么都不做。

EmptyStatement:
    ;
  

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

答案 3 :(得分:1)

;本身就是一个空操作符,因此在原始情况下你实际上有两个操作符。

答案 4 :(得分:1)

分号结束了句子。

System.out.println("Length after delete the text is "+name.length());;

第二个分号表示句子为空。

System.out.println("Length after delete the text is "+name.length());)

错了,因为你试图完成一个未完成的句子。

答案 5 :(得分:0)

因为不是错误?你为什么要问java?这在大多数语言中都有类似的语法...