java1.5新特性:静态导入import static

来源:互联网 发布:局部二值模式算法 编辑:程序博客网 时间:2024/06/06 22:44

       第一次看到项目中出现isEmpty(自己封装的一个工具方法)直接使用,而不需要xxxUtil.isEmpty()的形式。后面细细观察到在class顶部出现import static xxx.xxx.xxxUtil.*;的导入方式,遂发现这里多了一个static关键字,心想肯定是static在“作祟”。后来网上查了一些资料,发现:

       import static静态导入是JDK1.5中的新特性。一般我们导入一个类都用 import com.....ClassName;而静态导入是这样:import static com.....ClassName.*;这里的多了个static,还有就是类名ClassName后面多了个 .* ,意思是导入这个类里的静态方法。当然,也可以只导入某个静态方法,只要把 .* 换成静态方法名就行了。然后在这个类中,就可以直接用方法名调用静态方法,而不必用ClassName.方法名的方式来调用。 

      这种方法的好处就是可以简化一些操作,例如打印操作System.out.println(...);就可以将其写入一个静态方法print(...),在使用时直接print(...)就可以了。
      但是这种方法建议在有很多重复调用的时候使用,如果仅有一到两次调用,不如直接写来的方便。 

example: 
      在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方法上进行静态导入。
个人认为,虽然静态导入的方式简化了书写的代码量,但是我并不认为传统的写法增加类名的输入会给我们带来多么大的不便,相反更具可读性。