import static 静态导入是 JDK1.5 中的新特性。一般我们导入一个类都用 import com…..ClassName; 而静态导入是这样:import static
com…..ClassName.*; 这里的多了个 static,还有就是类名 ClassName 后面多了个 .* ,意思是导入这个类里的静态方法。当然,也可以只导入某个静态方法,只要把
.* 换成静态方法名就行了。然后在这个类中,就可以直接用方法名调用静态方法,而不必用 ClassName. 方法名
的方式来调用。
这种方法的好处就是可以简化一些操作,例如打印操作 System.out.println (…); 就可以将其写入一个静态方法 print
(…),在使用时直接 print (…) 就可以了。
但是这种方法建议在有很多重复调用的时候使用,如果仅有一到两次调用,不如直接写来的方便 。
在 Java 5 中,import 语句得到了增强,以便提供甚至更加强大的减少击键次数功能,虽然一些人争议说这是以可读性为代价的。这种新的特性成为静态导入。
当你想使用 static
成员时,可以使用静态导入(在 API 中的类和你自己的类上,都可以使用该特性)。下面是静态导入前后的代码实例:
在静态导入之前:
public class TestStatic {
public static void main(String[] args) {
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.toHexString(42));
}
}
在静态导入之后:
import static java.lang.System.out;
import static java.lang.Integer.*;
public class TestStaticImport {
public static void main(String[] args) {
out.println(MAX_VALUE);
out.println(toHexString(42));
}
}
两个类都产生了相同的输出:
2147483647
2a
让我们来看一下静态导入的过程中发生了什么:
1、虽然该特性通常称为 “静态导入”,但语法必须是 import static,后面跟你想导入的 static 成员的完全限定名称,或者通配符。在本例中,我们在 System 类的 out 对象上进行静态导入。
2、在本例中,我们可能想使用 java.lang.Integer 类的几个 static 成员。该静态导入语句使用通配符来表达 “我想在此类中的所有静态成员上进行静态导入”。
3、现在我们终于看到静态导入特性的好处!我们不必在 System.out.println 中键入 System。太好了!另外,我们不必在 Integer.MAX_VALUE 中键入 Integer。因此,在这行代码中,我们能够将快捷方式用于静态方法和一个常量。
4、最后,我们进行更多的快捷操作,这次针对 Integer 类的方法。
关于该特性,我们已经有点儿讽刺意味儿了,但不仅我们是这样的。我们不认为节省少量的击键次数会让代码难于阅读一点,但许多开发人员要求将它添加到语言中。
下面是静态导入的几条原则:
1、你必须说 import static, 不能说 static import。
2、提防含糊不清的命名 static 成员。例如,如果你对 Integer 类和 Long 类执行了静态导入,引用 MAX_VALUE 将导致一个编译器错误,因为 Integer 和 Long 都有一个 MAX_VALUE 常量,并且 Java 不会知道你在引用哪个 MAX_VALUE。
3、你可以在 static 对象引用、常量(记住,它们是 static 或 final)和 static 方法上进行静态导入。