import 與 import static

原文連接:https://www.geeksforgeeks.org/static-import-java/java

java中的靜態引用

直接解釋

  • 通常引入類的方式:import java.lang.Math.*;翻譯

  • 靜態引入類的方式:import static java.lang.Math.*;code

  • 區別在於:
  • 通常引入須要使用 ClassName.method(); 的方式去調用類中的靜態方法;
  • 而靜態引入後,直接使用 method(); 便可使用靜態方法。
  • 如下2張圖能夠清晰的查看。對象


原文翻譯

Java中的靜態引入

在Java中,靜態引入的方式是jkd1.5開始有的。有了靜態引入功能,就能夠直接拿到類中的靜態成員,不須要類名或者任何對象。
好比,咱們常常使用Math類中的sqrt()方法,使用方式爲:Math.sqrt(),可是經過使用靜態引入後,咱們就能夠直接使用sqrt()方法了。
根據SUN公司的微系統,這種寫法會提升代碼可讀性與效率。然而某些程序大佬說,這種寫法會令人迷惑,對於程序沒有什麼好處。
若是沒有明確的要求,咱們不該該使用靜態引入。
直接上代碼:blog

// Java程序說明
// 調用事先定義的方法
// 不使用靜態引入
class Geeks { 
    public static void main(String[] args) 
    { 
        System.out.println(Math.sqrt(4)); 
        System.out.println(Math.pow(2, 2)); 
        System.out.println(Math.abs(6.3)); 
    } 
} 

---
Output:

2.0
4.0
6.3

// 使用靜態引入
import static java.lang.Math.*; 
class Test2 { 
    public static void main(String[] args) 
    { 
        System.out.println(sqrt(4)); 
        System.out.println(pow(2, 2)); 
        System.out.println(abs(6.3)); 
    } 
} 
Copy CodeRun on IDE

Output:

2.0
4.0
6.3
  • 說明:Systemjava.lang package中的類,out存在因而System類中的靜態變量。經過靜態引入的方式,咱們能夠不用類名去調用它。

靜態引入帶來的歧義

  • 若是靜態導入了不一樣的類,然而他們的靜態成員名字剛好相同,編譯器就會拋出一個異常,它在沒有類名的條件下,沒法決定到底要使用的究竟是哪一個成員。
  • 代碼以下:
// Java程序說明
// 發生歧義
// 靜態引入
import static java.lang.Integer.*; 
import static java.lang.Byte.*; 
class Geeks { 
    public static void main(String[] args) 
    { 
        out.println(MAX_VALUE); 
    } 
} 

Output:

Error:Reference to MAX_VALUE is ambigious

說明:在上面的代碼中,咱們試圖去拿MAX_VALUE的值,可是每一個在包裝類中預先生命的元數據類型都包含了MAX_VALUE。這裏,咱們同時引入了IntegerByte類,而且試圖企業訪問靜態變量,可是當編譯器看到兩個導入語句的時候,必定不知道去調用IntegerByte其中哪一個的靜態變量。所以編譯器拋了個錯誤,說引用哪一個變量是不明確的。接口

普通引入與靜態引入之間的不一樣

  • 使用import,引入的是包中的類或者接口;而使用static import,能夠不經過類名來拿到的是類中的成員(變量、方法)。
  • 最大的不一樣是:可讀性。原文說靜態引入以後,調用時候的寫法可讀性更高? 我以爲是正常引入的時候,使用類名去調用的可讀性遠高於直接一個方法直接寫出來的形式
相關文章
相關標籤/搜索