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

为什么Java在语句末尾不显示双分号错误?,java,java-compiler-api,Java,Java Compiler Api,我不小心写了一个java语句,结尾有两个分号。java编译器不会显示任何错误,并且会运行 代码: 出于学习目的,我尝试在分号后添加不同的字符,java编译器将编译时错误显示为“标记上的语法错误”)”,删除此标记 本声明: System.out.println("Length after delete the text is "+name.length());) 为什么java将分号和其他字符视为不同的?因为双分号不被视为双分号,而是被视为分号加空语句。空语句不做任何操作,也不是错误。本身是一个

我不小心写了一个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());;
第二个分号表示句子是空的

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

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

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

System.out.println("Length after delete the text is "+name.length());;
空语句不起任何作用

空语句的执行始终正常完成


正如其他答案所述,通常第二个分号被解释为空语句,这在任何允许语句的地方都是允许的

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

public int method() {
   return 1;;
}

当编译器确定某个位置不可访问时(这在JLS中定义得很准确,但包括直接在
返回
中断
继续
抛出
)之后的位置,那里不允许有任何语句,甚至不允许有空语句。

+1,确切地说,这与编写
{}{}{{}(我指的是大括号)
在您的代码中的任何地方。谢谢我现在清除了。我想知道一些相关的问题,比如您的答案,我们使用分号来结束语句,但我不知道第二个分号是空运算符。实际上,它是一个空语句。Java中没有空表达式。很抱歉没有使用确切的术语。更正。否您可以要求eclipse标记带有警告的空语句。谢谢,我现在清除了。我想知道一些相关的问题,如您的回答,即我们使用分号结束语句,但我不知道第二个分号是空运算符。另一个示例可能是
抛出新异常(“xyz”);
public int method() {
   return 1;;
}