概述
J2SE 1.5里引入了“static import”机制,借助这一机制,可以用略掉所在的类或接口名的方式,来使用静态成员。 Static Import机制常常被直译成“静态导入”。但是从含义上看,“静态成员导入”更为贴切。
1. import和import static 的对比
import static静态导入是JDK1.5中的新特性。一般我们导入一个类都用 import com…..ClassName;而静态导入是这样:import static com…..ClassName.;这里的多了个static,还有就是类名ClassName后面多了个 . ,意思是导入这个类里的静态方法。当然,也可以只导入某个静态方法,只要把 .* 换成静态方法名就行了。然后在这个类中,就可以直接用方法名调用静态方法,而不必用ClassName.方法名 的方式来调用。
这种方法的好处就是可以简化一些操作,例如打印操作System.out.println(…);就可以将其写入一个静态方法print(…),在使用时直接print(…)就可以了。
但是这种方法建议在有很多重复调用的时候使用,如果仅有一到两次调用,不如直接写来的方便
然后在这个类中,就可以直接用方法名调用静态方法,而不必用ClassName.方法名 的方式来调用。
这种方法的好处就是可以简化一些操作,例如打印操作System.out.println(…);就可以将其写入一个静态方法print(…),在使用时直接print(…)就可以了。
但是这种方法建议在有很多重复调用的时候使用,如果仅有一到两次调用,不如直接写来的方便
有一种省去常量前的挂靠单位的变通做法:将所有的常量都定义到一个接口里面,然后让需要这些常量的类实现这个接口(这样的接口有一个专门的名目,叫作“Constant Interface”)。
精确导入的方式
精确的导入一个静态成员的方法,是在源文件的开头部分(任何类或接口的定义之前),加上类似这样的声明:
import static 包名.类或接口名.静态成员名;
游离于包外的类和接口们的特别问题
Java语言并未要求每个类和接口都必须属于某一个包。但是,在J2SE 1.4以后,无论是import语句也好,还是import static语句也好,都要求给一个所在包名出来。换而言之,对于不属于任何包的类和接口,是既不能用import导入它本身,也不能用import static导入它的静态成员的。
2.按需导入的方式
Static Import机制也支持一种不必逐一指出静态成员名称的导入方式。这时,要采用这样的语法:
import static 包名.类或接口名.*;
注意这种方式只是指出遇到来历不明的成员时,可以到这个类或接口里来查找,并不是把这个类或接口里的所有静态成员全部导入。
.导入之间的冲突问题
不同的类(接口)可以包括名称相同的静态成员。因此,在进行Static Import的时候,可能会出现“两个语句导入同名的静态成员”的情况。
在这种时候,J2SE 1.5会这样来加以处理:
如果两个语句都是精确导入的形式,或者都是按需导入的形式,那么会造成编译错误。
如果一个语句采用精确导入的形式,一个采用按需导入的形式,那么采用精确导入的形式的一个有效。
注意,如果两个同名的静态成员一个是属性,而另一个是方法,那么因为使用时的写法有差异,不会造成任何的冲突。
6.Static Import的负面影响
在编译期间,所有因Static Import的存在而简化了的名字,都会被编译器打回原型。因此在性能方面,Static Import没有任何影响。但是名字简化却可能造成一些维护方面的问题。
去掉静态成员前面的类型名,固然有助于在频繁调用时显得简洁,但是同时也失去了关于“这个东西在哪里定义”的提示信息,增加了阅读理解的麻烦。如果导入的来源很著名(比如java.lang.Math),或者来源的总数比较少,这个问题并不严重;但是在不属于这两种的情况下,这就不是基本可以忽略的问题了。
参考博客;
http://blog.csdn.net/xyz_fly/article/details/8178104
最后
以上就是丰富眼神为你收集整理的java 静态导入机制的全部内容,希望文章能够帮你解决java 静态导入机制所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复