在 J2SE 5.0 後新增了"import static" ,它的作用與 套件 (package) 中介紹的"import"類似,都是為了讓您可以省一些打字功夫,讓編譯器多作一點事而存在的。 "import static"是使用時的語法,國外網站上的文章或原文書中介紹這個功能時,大都用static import描述這個功能,編譯器訊息也這麼寫,這邊就還是用static import來作為原文時的描述,但為了比較彰顯這個功能的作用,我稱之為「import 靜態成員」。 使用"import static"語法,您可以import類別或介面中的靜態成員,例如來看看這個Hello! World!程式:
import static java.lang.System.out;在這邊您將java.lang.System類別中的out靜態成員import至程式中,編譯時編譯器遇到out名稱,就會自動展開為System.out,所以這還是編譯器給的蜜糖(Compiler suger)。 再來看一個例子,Arrays 類別 中有很多的靜態方法,為了使用方便,可使用"import static"將這些靜態方法import至程式中,例如:
如果您想要import類別下所有的靜態成員,可以使用 '*' 字元,例如:
import static java.lang.System.*; 與import一樣,import 靜態成員(static import)這個功能是為了方便,可以讓您少打一些字,您把少打的字交給編譯器來判斷並自動為您補上,但是您要注意名稱衝突問題,有些名稱衝突編譯器可 能透過以下的幾個方法來解決:
如果類別中有同名的field或方法名稱,則優先選用它們。
如果方法中有同名的變數名或引數名,則選用它們。
對於被使用import static的各個靜態成員,若有同名衝突,嘗試透用重載機制判斷,也就是透過方法名稱及引數列的比對來選擇適當的方法。 如果編譯器無法判斷,則會回報錯誤,例如若您定義的sort()方法與Arrays的sort()方法衝突,且編譯器也無法判別時,會出現以下的訊息:
reference to sort is ambiguous, both method sort(float[]) in onlyfun.caterpillar.Arrays and method sort(float[]) in java.util.Arrays match 總之,package與類別等可以用於管理一些資源,避免同名衝突發生,而"import"與"import staic"則是反其道而行,讓您可以獲得一些方便,如果同名衝突發生了,這種方便性的使用就有考慮的必要了。 |