使用包成員
組成包的類型稱為包成員。
要從其包外部使用公共包成員,你必須執行以下操作之一:
通過其完全限定名稱引用該成員
導入包成員
導入成員的整個包
每種情況都適用于不同的情況,如以下各節所述。
通過其完全限定名稱引用包成員到目前為止,本教程中的大多數示例都通過簡單名稱引用類型,例如Rectangle和StackOfInts,如果你編寫的代碼與該成員位于同一個包中,或者已導入該成員,則可以使用包成員的簡單名稱。
但是,如果你嘗試使用其他包中的成員并且尚未導入該包,則必須使用該成員的完全限定名稱,該名稱包括包名稱,這是上一個示例中graphics包中聲明的Rectangle類的完全限定名稱。
graphics.Rectangle
你可以使用此限定名稱來創建graphics.Rectangle的實例:
graphics.Rectangle myRect = new graphics.Rectangle();
限定名稱不經常使用,重復使用名稱時,重復鍵入名稱會變得乏味,代碼變得難以閱讀,或者,你可以導入成員或其包,然后使用其簡單名稱。
導入包成員要將特定成員導入當前文件,請在任何類型定義之前在文件開頭放置import語句,但在package語句之后(如果有),以下是從上一節中創建的graphics包導入Rectangle類的方法。
import graphics.Rectangle;
現在你可以通過簡單名稱引用Rectangle類。
如果你只使用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通過刪除類名重復使代碼更具可讀性。上一篇:創建和使用包 下一篇:管理源文件和類文件
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/72949.html
嵌套類 Java編程語言允許你在另一個類中定義類,這樣的類稱為嵌套類,如下所示: class OuterClass { ... class NestedClass { ... } } 術語:嵌套類分為兩類:靜態和非靜態,聲明為static的嵌套類稱為靜態嵌套類,非靜態嵌套類稱為內部類。 class OuterClass { ... stati...
包 本課程解釋了如何將類和接口捆綁到包中,如何使用包中的類,以及如何安排文件系統以便編譯器可以找到源文件。 創建和使用包 為了使類型更易于查找和使用,避免命名沖突和控制訪問,程序員將相關類型的組捆綁到包中。 定義:包是一組提供訪問保護和名稱空間管理的相關類型,請注意,類型引用類、接口、枚舉和注解類型,枚舉和注解類型分別是特殊的類和接口,因此在本課中通常將類型簡稱為類和接口。 作為Java平臺一部...
管理源文件和類文件 Java平臺的許多實現依賴于分層文件系統來管理源文件和類文件,盡管Java語言規范不要求這樣做,策略如下。 將類、接口、枚舉或注解類型的源代碼放在文本文件中,該文件的名稱是類型的簡單名稱,其擴展名為.java,例如: //in the Rectangle.java file package graphics; public class Rectangle { ... ...
繼承 在前面的課程中,你已經多次看到了繼承,在Java語言中,類可以從其他類派生,從而從這些類繼承字段和方法。 定義:從另一個類派生的類稱為子類(也是派生類,擴展類或子類),派生子類的類稱為超類(也是基類或父類)。 除了Object沒有超類,每個類都有一個且只有一個直接超類(單繼承),在沒有任何其他顯式超類的情況下,每個類都隱式地是Object的子類。 類可以從派生自類的類派生的類派生,依此類推,...
類的更多方面 本節介紹依賴于使用對象引用的類的更多方面以及你在前面的對象部分中了解到的點運算符。 從方法返回值 方法返回到調用它的代碼。 完成方法中的所有語句。 到達return語句。 或拋出異常(稍后介紹)。 以先發生者為準。 你在方法聲明中聲明方法的返回類型,在方法體內,使用return語句返回值。 聲明為void的任何方法都不返回值,它不需要包含return語句,但它可能會這樣做,在這種...
閱讀 3725·2021-10-11 10:59
閱讀 1307·2019-08-30 15:44
閱讀 3484·2019-08-29 16:39
閱讀 2891·2019-08-29 16:29
閱讀 1805·2019-08-29 15:24
閱讀 812·2019-08-29 15:05
閱讀 1268·2019-08-29 12:34
閱讀 2323·2019-08-29 12:19