【问题标题】:Why does Java not show an error for double semicolon at the end of a statement?为什么Java在语句末尾不显示双分号错误?
【发布时间】:2012-03-03 13:22:09
【问题描述】:

我不小心写了一个结尾有两个分号的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把分号和其他字符区别对待?

【问题讨论】:

    标签: java java-compiler-api


    【解决方案1】:

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

    【讨论】:

    • +1,没错,这很像在代码中的任何地方写{}{}{}{} (braces I mean)
    • 谢谢我现在清除了。我想一些相关的点,比如你的回答是我们使用分号来结束语句但我不知道第二个分号是一个空运算符。
    • 其实是一个空的语句。 Java 中没有空表达式。
    • 很抱歉没有使用确切的术语。已更正。
    • 请注意,您可以要求 eclipse 用警告标记空语句。
    【解决方案2】:

    正如其他答案所说,通常第二个分号被解释为空语句,在允许语句的情况下,这是允许的。

    其实也有双分号会报错的情况:

    public int method() {
       return 1;;
    }
    

    当编译器确定某个位置不可到达时(这在 JLS 中准确定义,但包括紧跟在 returnbreakcontinuethrow 之后的位置),没有语句是允许在那里,甚至没有一个空的。

    【讨论】:

    • 另一个例子是throw new Exception("xyz");;
    【解决方案3】:

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

    空语句什么都不做。

    EmptyStatement:
        ;
    

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

    【讨论】:

      【解决方案4】:

      ; 本身是一个空运算符,因此在原始情况下您实际上有两个运算符。

      【讨论】:

      • 谢谢我现在清除了。我想一些相关的点,比如你的回答是我们使用分号来结束语句但我不知道第二个分号是一个空运算符。
      【解决方案5】:

      分号结束句子。

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2022-01-24
        • 2012-12-16
        • 2019-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-16
        • 1970-01-01
        相关资源
        最近更新 更多