我已经用Java编程了一段时间,我第一次遇到这种语法:
public Object getSomething(){return something;};
有趣的是我的最后一个分号。它似乎没有导致编译器错误,并且据我所知不会生成运行时错误,所以它似乎是有效的语法。我什么时候会使用这种语法?或者它只是允许但通常不使用的东西?
语法允许它作为对无害语法错误的让步,但它通常不被使用,并不意味着任何不同(比将分号留下)。
就像方法中的};
(例如在if
块之后)是null语句并且被允许一样,方法外的错误分号被认为是空声明并且是允许的。
具体来说,Java Language Specification的以下产品允许:
ClassBodyDeclaration: ; [static] Block ModifiersOpt MemberDecl
这只是一个空洞的陈述 - 很可能是一个错字。
考虑这样一个事实:在所有基于C语言中,语句以分号结束。像这样的悬挂分号只会终止当前的陈述,在这种情况下,这些陈述什么都不是。
或者它只是允许但通常不使用的东西?
是的,就是这样。它是有效的Java,但没有做任何事情:
public class X {
;;;;;;;;;;;;;;;;;;
;;;;;
;
}
分号被解释为空语句,只要允许使用语句,就允许使用分号。
EmptyStatement:
;
正如Java规范所说
http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.6