組成包的類型稱爲包成員。java
要從其包外部使用公共包成員,你必須執行如下操做之一:segmentfault
每種狀況都適用於不一樣的狀況,如如下各節所述。ide
到目前爲止,本教程中的大多數示例都經過簡單名稱引用類型,例如Rectangle
和StackOfInts
,若是你編寫的代碼與該成員位於同一個包中,或者已導入該成員,則可使用包成員的簡單名稱。工具
可是,若是你嘗試使用其餘包中的成員而且還沒有導入該包,則必須使用該成員的徹底限定名稱,該名稱包括包名稱,這是上一個示例中graphics
包中聲明的Rectangle
類的徹底限定名稱。code
graphics.Rectangle
你可使用此限定名稱來建立graphics.Rectangle
的實例:對象
graphics.Rectangle myRect = new graphics.Rectangle();
限定名稱不常常使用,重複使用名稱時,重複鍵入名稱會變得乏味,代碼變得難以閱讀,或者,你能夠導入成員或其包,而後使用其簡單名稱。教程
要將特定成員導入當前文件,請在任何類型定義以前在文件開頭放置import
語句,但在package
語句以後(若是有),如下是從上一節中建立的graphics
包導入Rectangle
類的方法。接口
import graphics.Rectangle;
如今你能夠經過簡單名稱引用Rectangle
類。get
若是你只使用graphics
包中的一些成員,這種方法頗有效,可是若是從包中使用多種類型,則應導入整個包。編譯器
要導入特定包中包含的全部類型,請使用帶有星號(*
)通配符的import
語句。
import graphics.*;
如今,你能夠經過簡單名稱引用graphics
包中的任何類或接口。
Circle myCircle = new Circle(); Rectangle myRectangle = new Rectangle();
import
語句中的星號只能用於指定包中的全部類,如此處所示,它不能用於匹配包中類的子集,例如,如下內容與graphics
包中以A
開頭的全部類都不匹配。
// does not work import graphics.A*;
相反,它會生成編譯器錯誤,使用import
語句,一般只導入單個包成員或整個包。
另外一種不太常見的導入形式容許你導入封閉類的公共嵌套類,例如,若是graphics.Rectangle
類包含有用的嵌套類(如Rectangle.DoubleWide
和Rectangle.Square
),則可使用如下兩個語句導入Rectangle
及其嵌套類。
import graphics.Rectangle; import graphics.Rectangle.*;
請注意,第二個import
語句不會導入Rectangle
。
另外一種不常見的導入形式是靜態導入語句,將在本節末尾討論。
爲方便起見,Java編譯器會自動爲每一個源文件導入兩個完整的包:java.lang
包和當前包(當前文件的包)。
首先,包彷佛是分層的,但它們不是,例如,Java API包括java.awt
包,java.awt.color
包,java.awt.font
包以及許多以java.awt
開頭的包。可是,java.awt
包中包含java.awt.color
包、java.awt.font
包和其餘java.awt.xxxx
包。前綴java.awt
(Java抽象窗口工具包)用於許多相關的包,以使關係明顯,但不顯示包含。
導入java.awt.*
將導入java.awt
包中的全部類型,但它不導入java.awt.color
,java.awt.font
或任何其餘java.awt.xxxx
包。若是你計劃使用java.awt.color
中的類和其餘類型以及java.awt
中的類,則必須導入這兩個包使用其全部文件:
import java.awt.*; import java.awt.color.*;
若是一個包中的成員與另外一個包中的成員共享其名稱而且兩個包都已導入,則必須經過其限定名稱引用每一個成員,例如,graphics
包定義了一個名爲Rectangle
的類,java.awt
包還包含一個Rectangle
類,若是已導入graphics
和java.awt
,則如下內容不明確。
Rectangle rect;
在這種狀況下,你必須使用成員的徹底限定名稱來準確指出你想要的Rectangle
類,例如:
graphics.Rectangle rect;
在某些狀況下,你須要頻繁訪問static final
字段(常量)和來自一個或兩個類的靜態方法,反覆對這些類的名稱進行前綴可能會致使代碼混亂,static import
語句爲你提供了一種導入要使用的常量和靜態方法的方法,這樣你就不須要爲其類的名稱添加前綴。
java.lang.Math
類定義PI
常量和許多靜態方法,包括計算正弦、餘弦、切線、平方根、最大值
最小值、指數等的方法,例如:
public static final double PI = 3.141592653589793; public static double cos(double a) { ... }
一般,要從其餘類使用這些對象,前綴類名,以下所示。
double r = Math.cos(Math.PI * theta);
你可使用static import
語句導入java.lang.Math
的靜態成員,這樣你就不須要爲類名稱添加前綴Math
,Math
的靜態成員能夠單獨導入:
import static java.lang.Math.PI;
或做爲一個組:
import static java.lang.Math.*;
導入後,能夠無限制地使用靜態成員,例如,以前的代碼段將變爲:
double r = cos(PI * theta);
顯然,你能夠編寫本身的類,其中包含你常常使用的常量和靜態方法,而後使用static import
語句,例如:
import static mypackage.MyConstants.*;
很是謹慎地使用static import
,過分使用靜態導入會致使代碼難以閱讀和維護,由於代碼的讀者不知道哪一個類定義了特定的靜態對象,正確地使用,static import
經過刪除類名重複使代碼更具可讀性。