这可能是一个奇怪的问题,但却是一个有效的问题。我知道下面的语句没有编译错误:
ArrayList list = new ArrayList();;; //(with three `;` semi-colon)
好的,现在我写了下面的import语句:
import java.util.ArrayList;;; (with three `;` semi-colon)
但是我得到了以下编译错误:
Syntax error on token ";", invalid StaticImportOnDemandDeclarationName
为什么吗
答案 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 ;;; (有三个;
分号)