import static静态导入是JDK1.5中的新特性。一般我们导入一个类都用 import com…..ClassName;而静态导入是这样:import static com…..ClassName.;这里的多了个static,还有就是类名ClassName后面多了个 . ,意思是导入这个类里的静态方法。当然,也可以只导入某个静态方法,只要把 .* 换成静态方法名就行了。然后在这个类中,就可以直接用方法名调用静态方法,而不必用ClassName.方法名 的方式来调用。
这种方法的好处就是可以简化一些操作,例如打印操作System.out.println(…);就可以将其写入一个静态方法print(…),在使用时直接print(…)就可以了。
但是这种方法建议在有很多重复调用的时候使用,如果仅有一到两次调用,不如直接写来的方便下面是关于静态导入声明的一些重要规则。
1) 如果导入两个具有相同简单名称的静态成员,一个使用单个静态导入声明,另一个使用静态按需导入声明,则使用单个静态导入声明导入的静态成员优先。
假设有两个类,package1.Class1和package2.Class2。两个类都有一个名为methodA的静态方法。以下代码将使用package1.Class1.methodA()方法,因为它是使用单个静态导入声明导入的:
1
2
3
4
5
6
7
8 >import static package1.Class1.methodA; // Imports Class1.methodA() method
>import static package2.Class2.*; // Imports Class2.methodA() method too
>public class Test {
public static void main(String[] args) {
methodA(); // Class1.methodA() will be called
}
>}2) 不允许使用单个静态导入声明导入两个具有相同简单名称的静态成员。以下静态导入声明生成错误,因为它们都使用相同的简单名称methodA导入静态成员:
1
2 >import static package1.Class1.methodA;
>import static package1.Class2.methodA; // An error3) 如果使用单个静态导入声明导入静态成员,并且同一类中存在同名的静态成员,则该类中的静态成员将被使用。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 >// A.java
>package package1;
>public class A {
public static void test() {
System.out.println("package1.A.test()");
}
>}
>// Test.java
>package package2;
>import static package1.A.test;
>public class Test {
public static void main(String[] args) {
test(); // Will use package2.Test.test() method, not package1.A.test() method
}
public static void test() {
System.out.println("package2.Test.test()");
}
>}
>Output:
>package2.Test.test()静态导入似乎可以帮助您使用静态成员的简单名称,从而使程序更易于编写和读取。有时静态导入可能会在程序中引入细微的错误,这可能很难调试。建议您完全不要使用静态导入,或者仅在非常罕见的情况下使用。