java学习札记(18)-static import

来源:互联网 发布:数组的长度是什么 编辑:程序博客网 时间:2024/05/18 01:03

import 静态成员(Static import)

在 J2SE 5.0  后新增了"import static" ,它的作用与 套件(package) 中介绍的"import"类似,都是为了让您可以省一些打字功夫,让编译器多作一点事而存在的。

"import static"是使用时的语法,国外网站上的文章或原文书中介绍这个功能时,大都用static import描述这个功能,编译器讯息也这么写,这边就还是用static import来作为原文时的描述,但为了比较彰显这个功能的作用,我称之为“import 静态成员”。

使用"import static"语法,您可以import类别或介面中的静态成员,例如来看看这个Hello! World!程式:

    * HelloWorld.java

import static java.lang.System.out;
 
public class HelloWorld {
    public static void main(String[] args) {
        out.println("Hello! World!");
    }
}



在这边您将java.lang.System类别中的out静态成员import至程式中,编译时编译器遇到out名称,就会自动展开为System.out,所以这还是编译器给的蜜糖(Compiler suger)。

再来看一个例子, Arrays 类别 中有很多的静态方法,为了使用方便,可使用"import static"将这些静态方法import至程式中,例如:

    * UseImportStatic.java

 import static java.lang.System.out;
 import static java.util.Arrays.sort;
 
 public class UseImportStatic {
    public static void main(String[] args) {
        int[] array = {2, 5, 3, 1, 7, 6, 8};

        sort(array);

        for(int i : array) {
            out.print(i + " ");
        }
    }
 }


如果您想要import类别下所有的静态成员,可以使用 '*' 字元,例如:

    * UseImportStatic.java

import static java.lang.System.*;
import static java.util.Arrays.*;
 
public class UseImportStatic {
    public static void main(String[] args) {
        int[] array = {2, 5, 3, 1, 7, 6, 8};

        sort(array);

        for(int i : array) {
            out.print(i + " ");
        }
    }
}


与import一样,import 静态成员(static import)这个功能是为了方便,可以让您少打一些字,您把少打的字交给编译器来判断并自动为您补上,但是您要注意名称冲突问题,有些名称冲突编译器可能透过以下的几个方法来解决:

    * 成员覆盖

如果类别中有同名的field或方法名称,则优先选用它们。

    * 区域变数覆盖

如果方法中有同名的变数名或引数名,则选用它们。

    * 重载(Overload)方法 上的比对

对于被使用import static的各个静态成员,若有同名冲突,尝试透用重载机制判断,也就是透过方法名称及引数列的比对来选择适当的方法。


如果编译器无法判断,则会回报错误,例如若您定义的sort()方法与Arrays的sort()方法冲突,且编译器也无法判别时,会出现以下的讯息:
reference to sort is ambiguous,

both method sort(float[]) in onlyfun.caterpillar.Arrays and

method sort(float[]) in java.util.Arrays match


总之,package与类别等可以用于管理一些资源,避免同名冲突发生,而"import"与"import staic"则是反其道而行,让您可以获得一些方便,如果同名冲突发生了,这种方便性的使用就有考虑的必要了。


引用自:http://www.dojochina.com/?q=node/421

原创粉丝点击