Java 8中的"static import"与"import static"有何区别?

10

我试图在Java中使用静态导入,但我写错了

static import java.lang.System.out;

代码编译成功(尽管“out”符号找不到),没有语法错误。

那么,“静态导入”到底是什么意思呢?


1
真的吗?根据http://docs.oracle.com/javase/specs/jls/se5.0/html/syntax.html,那应该是语法错误--关键字import只能开始一个导入声明。 - Ray Toal
1
它对我来说无法编译...你用的是什么IDE? - ApproachingDarknessFish
2
还有,你把那行代码放在哪里了?无论我是把它放在类声明的上面还是类内部,Eclipse都会报错。 - Bill the Lizard
1
所以这是一个bug,我正在使用Sun的Java 8(SDK 1.8)预览版适用于Mac OS X。那里应该是语法错误(即使没有找到“out”符号,因为如果我使用“静态导入”的System.out.println,程序会编译而不出现错误或警告)。 - paulotorrens
1
@PauloTorrens - 啊!这可能是编译器的错误,或者是我不知道的Java 8语言的变化。JLS 8尚未可用/最终确定。 - Stephen C
显示剩余4条评论
2个回答

24

这段代码不应该通过编译。

static import java.lang.System.out;
根据 JLS,一个单一的静态导入应该像这样:
import static java.lang.System.out;
所有形式的Java导入语句都以关键字import开头,我认为除了导入语句之外没有其他情况可以使用import关键字。
注意:importstatic关键字在此上下文中不是修饰符,因此“修饰符可以以任何顺序提供”的元规则不适用于此处。
简而言之,要么您的编译器/IDE已损坏或混淆……要么您正在查看的不是真正的Java源代码。

0
为了访问类的静态成员,您必须使用包含它的完整类名。例如,要访问Math类中的pi值,您必须使用java.lang.Math.PI。但是,如果您导入它(import static java.lang.Math.PI),则可以在代码中仅使用PI来访问它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接