import static和import的区别

import static静态导入是JDK1.5中的新特性。通常咱们导入一个类都用 import com.....ClassName;而静态导入是这样:import static com.....ClassName.*;这里的多了个static,还有就是类名ClassName后面多了个 .* ,意思是导入这个类里的静态方法。固然,也能够只导入某个静态方法,只要把 .* 换成静态方法名就好了。而后在这个类中,就能够直接用方法名调用静态方法,而没必要用ClassName.方法名 的方式来调用。 

这种方法的好处就是能够简化一些操做,例如打印操做System.out.println(...);就能够将其写入一个静态方法print(...),在使用时直接print(...)就能够了。 

可是这种方法建议在有不少重复调用的时候使用,若是仅有一到两次调用,不如直接写来的方便 java

 
 
example:

在Java 5中,import语句获得了加强,以便提供甚至更增强大的减小击键次数功能,虽然一些人争议说这是以可读性为代价的。这种新的特性成为静态导入。

当你想使用static成员时,可使用静态导入(在API中的类和你本身的类上,均可以使用该特性)。下面是静态导入先后的代码实例:spa

在静态导入以前:对象

  1. public class TestStatic { 
  2.     public static void main(String[] args) { 
  3.         System.out.println(Integer.MAX_VALUE); 
  4.         System.out.println(Integer.toHexString(42)); 
  5.     } 
  6. }
在静态导入以后:
 
  1. import static java.lang.System.out; 
  2. import static java.lang.Integer.*; 
  3.  
  4. public class TestStaticImport { 
  5.     public static void main(String[] args) { 
  6.         out.println(MAX_VALUE); 
  7.         out.println(toHexString(42)); 
  8.     } 
  9. }
两个类都产生相同的输出:
  1. 2147483647 
  2. 2a
让咱们看一下使用静态导入特性的代码中将发生什么:

一、虽然该特性一般称为“静态导入”,但语法必须是import static,后面跟你想导入的static成员的彻底限定名称,或者通配符。在本例中,咱们在System类的out对象上进行静态导入。ci

二、在本例中,咱们可能想使用java.lang.Integer类的几个static成员。该静态导入语句使用通配符来表达“我想在此类中的全部静态成员上进行静态导入”。开发

三、如今咱们终于看到静态导入特性的好处!咱们没必要在System.out.println中键入System。太好了!另外,咱们没必要在Integer.MAX_VALUE中键入Integer。所以,在这行代码中,咱们可以将快捷方式用于静态方法和一个常量。编译器

四、最后,咱们进行更多的快捷操做,此次针对Integer类的方法。io

关于该特性,咱们已经有点儿讽刺意味儿了,但不只咱们是这样的。咱们不认为节省少许的击键次数会让代码难于阅读一点,但许多开发人员要求将它添加到语言中。编译

下面是使用静态导入的几条原则:table

  • 你必须说import static, 不能说static import。
  • 提防含糊不清的命名static成员。例如,若是你对Integer类和Long类执行了静态导入,引用MAX_VALUE将致使一个编译器错误,由于Integer和Long都有一个MAX_VALUE常量,而且Java不会知道你在引用哪一个MAX_VALUE。
  • 你能够在static对象引用、常量(记住,它们是static 或final)和static方法上进行静态导入。