靜態引入

一.什麼是靜態導入

  • 如果要使用靜態成員(方法和變量)我們必須給出提供這個靜態成員的類。
  • 使用靜態導入可以使被導入類的靜態變量和靜態方法在當前類直接可見,使用這些靜態成員無需再給出他們的類名。

二.靜態導入的語法 
1.精確導入方式:import static 包名.類或接口名.靜態成員名; 
例如:

//精確的導入Math.sin和Math.PI
import static java.lang.Math.sin;
import static java.lang.Math.PI;

public class StaticImportSampleA {
    public static void main(String[] args) {
        System.out.println(sin(PI/2));//輸出“1.0”
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2.按需導入的方式:import static 包名.類或接口名.*; 
注意:這種方式只是指出遇到來歷不明的成員時,可以到這個類或接口裏來查找,並不是把這個類或接口裏的所有靜態成員全部導入。 
例如:

//聲明遇到來歷不明的成員時到java.lang.Math中去尋找
import static java.lang.Math.*;

public class StaticImportSampleB {
    public static void main(String[] args) {
        System.out.println(sin(PI/2));//輸出“1.0”
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

三.靜態導入的一些細節

  1. 可以靜態導入的東西:變量、常量、方法和內部類都可以導入
  2. static import不能突破Java語言中原有的訪問控制機制的限制,不過也並不在這方面增加新的約束。原來有權限訪問的靜態成員,都可以被導入和使用;而原來無權限訪問的靜態成員,用了這個方法之後也仍然是不能訪問。
  3. 導入之間的衝突問題:進行static import的時候,可能會出現“兩個語句導入同名的靜態成員”的情況。在這種時候,J2SE 1.5會這樣來加以處理: 
    -如果兩個語句都是精確導入的形式,或者都是按需導入的形式,那麼會造成編譯錯誤。 
    -如果一個語句採用精確導入的形式,一個採用按需導入的形式,那麼採用精確導入的形式的一個有效。 
    注意:如果兩個同名的靜態成員一個是屬性,而另一個是方法,那麼因爲使用時的寫法有差異,不會造成任何的衝突。
  4. 本地和外來之間的衝突問題:有時候,導入的東西還可能和本地的東西相沖突,這種情況下的處理規則,是“本地優先”。
  5. static import的負面影響:在編譯期間,所有因static import的存在而簡化了的名字,都會被編譯器打回原型。因此在性能方面,static import沒有任何影響。但是名字簡化卻可能造成一些維護方面的問題。 
    去掉靜態成員前面的類型名,固然有助於在頻繁調用時顯得簡潔,但是同時也失去了關於“這個東西在哪裏定義”的提示信息,增加了閱讀理解的麻煩。如果導入的來源很著名(比如java.lang.Math),或者來源的總數比較少,這個問題並不嚴重;但是在不屬於這兩種的情況下,這就不是基本可以忽略的問題了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章