语法错误:导入带有多个分号的语句

时间:2014-08-17 19:36:57

标签: java

这可能是一个奇怪的问题,但却是一个有效的问题。我知道下面的语句没有编译错误:

ArrayList list = new ArrayList();;; //(with three `;` semi-colon)

好的,现在我写了下面的import语句:

import java.util.ArrayList;;; (with three `;` semi-colon)

但是我得到了以下编译错误:

Syntax error on token ";", invalid StaticImportOnDemandDeclarationName

为什么吗

2 个答案:

答案 0 :(得分:4)

你在这里有什么:

ArrayList list = new ArrayList();;; //(with three `;` semi-colon)

不是以三个分号终止的声明。这是一个以一个分号结尾的语句,后跟两个空语句

空语句在Java中是合法的,但Java源文件的导入部分不包含语句,它由导入声明组成。

JLS 14.6定义空语句:

  

空语句什么都不做。

  EmptyStatement:
     ;
     

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

可能合法使用空语句:

//loop forever
while (true) {;} // the body of this loop is an empty statement.

换句话说,在第一个示例中,您有一个赋值后跟两个空语句。分号不是严格多余的。

import部分有自己的语法,没有一个语法规则允许任意的分号。语法由JLS 7.5指定:

ImportDeclaration:
    SingleTypeImportDeclaration
    TypeImportOnDemandDeclaration   
    SingleStaticImportDeclaration   
    StaticImportOnDemandDeclaration

SingleTypeImportDeclaration:
    import TypeName ;

...

答案 1 :(得分:0)

ArrayList list = new ArrayList();;; //(有三个;分号)

在第一个半冒号之后,接下来的两个分号代表空语句,这些只在类部分区域中是合法的,而不是在导入部分区域。

这就是为什么会产生编译时错误

import java.util.ArrayList ;;; (有三个;分号)