【问题标题】:When would you put a semicolon after a method closing brace?什么时候在方法右大括号后加分号?
【发布时间】:2010-04-27 19:29:36
【问题描述】:

我用 Java 编程已经有一段时间了,我只是第一次遇到这种语法:

public Object getSomething(){return something;}; 

让我感兴趣的是最后的分号。它似乎不会导致编译器错误,据我所知,它不会产生运行时错误,所以它似乎是有效的语法。我什么时候会使用这种语法?还是只是允许但通常不使用的东西?

【问题讨论】:

  • 注意:这同样适用于类 - 您可以在 C++ 样式中使用 ; 终止它们;使用直接移植的代码时会派上用场。

标签: java syntax


【解决方案1】:

语法允许它作为对无害语法错误的让步,但通常不使用它并且没有任何不同(与省略分号相比)。

就像}; inside 一个方法(例如在if 块之后)是一个空语句并且是允许的,错误的分号outside 一个方法被视为空声明并被允许。

具体来说,Java Language Specification 的以下产生式允许这样做:

ClassBodyDeclaration:
  ; 
  [static] Block
  ModifiersOpt MemberDecl

【讨论】:

    【解决方案2】:

    这只是一个空语句 - 它很可能是一个错字。

    考虑一个事实,在所有基于 C 的语言中,语句都以分号结束。像这样悬挂的分号只会终止当前的语句,在这种情况下它什么都不是。

    【讨论】:

    • 所以从技术上讲,我可以在语句中间以外的任何地方添加任意数量的分号?
    • @froadie - 是的,你可以这样做。
    【解决方案3】:

    或者它只是允许但通常不使用的东西?

    是的,就是这样。它是有效的 Java,但不执行任何操作:

    public class X  {
        ;;;;;;;;;;;;;;;;;;
        ;;;;;
        ;
    }
    

    【讨论】:

      【解决方案4】:

      分号被解释为空语句,只要语句允许,分号就被允许。

      EmptyStatement:
       ;
      

      正如 Java 规范所说的

      http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.6

      【讨论】:

        猜你喜欢
        • 2012-09-02
        • 2018-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-09
        相关资源
        最近更新 更多