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

我不小心写了一个带有两个分号的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将分号和其他字符视为不同?

因为双分号不被视为双分号,而是分号加空语句。 一个空的陈述,什么都不做,不是一个错误。

正如其他答案所述,通常第二个分号被解释为空语句,只有在允许声明的情况下才允许这样做。

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

 public int method() { return 1;; } 

当编译器确定某个位置不可访问时(这在JLS中确切定义,但在returnbreakcontinuethrow之后直接包含位置),那里不允许任何语句,甚至不允许空语句。

根据Java语言标准,第二个分号是一个空语句 。

空语句什么都不做。

 EmptyStatement: ; 

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

; 它本身就是一个空运算符,所以你在原始情况下有效地拥有两个运算符。

分号结束了句子。

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

第二个分号表示句子是空的。

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

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

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