import 與 import static


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

java中的靜態引用

直接解釋

  • 一般引入類的方式:import java.lang.Math.*;

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

  • 區別在於:

  • 一般引入需要使用 ClassName.method(); 的方式去調用類中的靜態方法;

  • 而靜態引入后,直接使用 method(); 即可使用靜態方法。

  • 以下2張圖可以清晰的查看。


原文翻譯

Java中的靜態引入

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

// 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
  • 說明:System java.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 。這里,我們同時引入了Integer Byte 類,並且試圖企業訪問靜態變量,但是當編譯器看到兩個導入語句的時候,一定不知道去調用Integer Byte 其中哪個的靜態變量。因此編譯器拋了個錯誤,說引用哪個變量是不明確的。

普通引入與靜態引入之間的不同

  • 使用import,引入的是包中的類或者接口;而使用static import,可以不通過類名來拿到的是類中的成員(變量、方法)。
  • 最大的不同是:可讀性。原文說靜態引入之后,調用時候的寫法可讀性更高? 我覺得是正常引入的時候,使用類名去調用的可讀性遠高於直接一個方法直接寫出來的形式


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM