使用包成員
組成包的類(lèi)型稱(chēng)為包成員。
要從其包外部使用公共包成員,你必須執(zhí)行以下操作之一:
通過(guò)其完全限定名稱(chēng)引用該成員
導(dǎo)入包成員
導(dǎo)入成員的整個(gè)包
每種情況都適用于不同的情況,如以下各節(jié)所述。
通過(guò)其完全限定名稱(chēng)引用包成員到目前為止,本教程中的大多數(shù)示例都通過(guò)簡(jiǎn)單名稱(chēng)引用類(lèi)型,例如Rectangle和StackOfInts,如果你編寫(xiě)的代碼與該成員位于同一個(gè)包中,或者已導(dǎo)入該成員,則可以使用包成員的簡(jiǎn)單名稱(chēng)。
但是,如果你嘗試使用其他包中的成員并且尚未導(dǎo)入該包,則必須使用該成員的完全限定名稱(chēng),該名稱(chēng)包括包名稱(chēng),這是上一個(gè)示例中graphics包中聲明的Rectangle類(lèi)的完全限定名稱(chēng)。
graphics.Rectangle
你可以使用此限定名稱(chēng)來(lái)創(chuàng)建graphics.Rectangle的實(shí)例:
graphics.Rectangle myRect = new graphics.Rectangle();
限定名稱(chēng)不經(jīng)常使用,重復(fù)使用名稱(chēng)時(shí),重復(fù)鍵入名稱(chēng)會(huì)變得乏味,代碼變得難以閱讀,或者,你可以導(dǎo)入成員或其包,然后使用其簡(jiǎn)單名稱(chēng)。
導(dǎo)入包成員要將特定成員導(dǎo)入當(dāng)前文件,請(qǐng)?jiān)谌魏晤?lèi)型定義之前在文件開(kāi)頭放置import語(yǔ)句,但在package語(yǔ)句之后(如果有),以下是從上一節(jié)中創(chuàng)建的graphics包導(dǎo)入Rectangle類(lèi)的方法。
import graphics.Rectangle;
現(xiàn)在你可以通過(guò)簡(jiǎn)單名稱(chēng)引用Rectangle類(lèi)。
如果你只使用graphics包中的一些成員,這種方法很有效,但是如果從包中使用多種類(lèi)型,則應(yīng)導(dǎo)入整個(gè)包。
導(dǎo)入整個(gè)包要導(dǎo)入特定包中包含的所有類(lèi)型,請(qǐng)使用帶有星號(hào)(*)通配符的import語(yǔ)句。
import graphics.*;
現(xiàn)在,你可以通過(guò)簡(jiǎn)單名稱(chēng)引用graphics包中的任何類(lèi)或接口。
Circle myCircle = new Circle(); Rectangle myRectangle = new Rectangle();
import語(yǔ)句中的星號(hào)只能用于指定包中的所有類(lèi),如此處所示,它不能用于匹配包中類(lèi)的子集,例如,以下內(nèi)容與graphics包中以A開(kāi)頭的所有類(lèi)都不匹配。
// does not work import graphics.A*;
相反,它會(huì)生成編譯器錯(cuò)誤,使用import語(yǔ)句,通常只導(dǎo)入單個(gè)包成員或整個(gè)包。
另一種不太常見(jiàn)的導(dǎo)入形式允許你導(dǎo)入封閉類(lèi)的公共嵌套類(lèi),例如,如果graphics.Rectangle類(lèi)包含有用的嵌套類(lèi)(如Rectangle.DoubleWide和Rectangle.Square),則可以使用以下兩個(gè)語(yǔ)句導(dǎo)入Rectangle及其嵌套類(lèi)。
import graphics.Rectangle; import graphics.Rectangle.*;
請(qǐng)注意,第二個(gè)import語(yǔ)句不會(huì)導(dǎo)入Rectangle。
另一種不常見(jiàn)的導(dǎo)入形式是靜態(tài)導(dǎo)入語(yǔ)句,將在本節(jié)末尾討論。
為方便起見(jiàn),Java編譯器會(huì)自動(dòng)為每個(gè)源文件導(dǎo)入兩個(gè)完整的包:java.lang包和當(dāng)前包(當(dāng)前文件的包)。
包的表觀層次結(jié)構(gòu)首先,包似乎是分層的,但它們不是,例如,Java API包括java.awt包,java.awt.color包,java.awt.font包以及許多以java.awt開(kāi)頭的包。但是,java.awt包中包含java.awt.color包、java.awt.font包和其他java.awt.xxxx包。前綴java.awt(Java抽象窗口工具包)用于許多相關(guān)的包,以使關(guān)系明顯,但不顯示包含。
導(dǎo)入java.awt.*將導(dǎo)入java.awt包中的所有類(lèi)型,但它不導(dǎo)入java.awt.color,java.awt.font或任何其他java.awt.xxxx包。如果你計(jì)劃使用java.awt.color中的類(lèi)和其他類(lèi)型以及java.awt中的類(lèi),則必須導(dǎo)入這兩個(gè)包使用其所有文件:
import java.awt.*; import java.awt.color.*;名稱(chēng)歧義
如果一個(gè)包中的成員與另一個(gè)包中的成員共享其名稱(chēng)并且兩個(gè)包都已導(dǎo)入,則必須通過(guò)其限定名稱(chēng)引用每個(gè)成員,例如,graphics包定義了一個(gè)名為Rectangle的類(lèi),java.awt包還包含一個(gè)Rectangle類(lèi),如果已導(dǎo)入graphics和java.awt,則以下內(nèi)容不明確。
Rectangle rect;
在這種情況下,你必須使用成員的完全限定名稱(chēng)來(lái)準(zhǔn)確指出你想要的Rectangle類(lèi),例如:
graphics.Rectangle rect;靜態(tài)導(dǎo)入語(yǔ)句
在某些情況下,你需要頻繁訪問(wèn)static final字段(常量)和來(lái)自一個(gè)或兩個(gè)類(lèi)的靜態(tài)方法,反復(fù)對(duì)這些類(lèi)的名稱(chēng)進(jìn)行前綴可能會(huì)導(dǎo)致代碼混亂,static import語(yǔ)句為你提供了一種導(dǎo)入要使用的常量和靜態(tài)方法的方法,這樣你就不需要為其類(lèi)的名稱(chēng)添加前綴。
java.lang.Math類(lèi)定義PI常量和許多靜態(tài)方法,包括計(jì)算正弦、余弦、切線、平方根、最大值
最小值、指數(shù)等的方法,例如:
public static final double PI = 3.141592653589793; public static double cos(double a) { ... }
通常,要從其他類(lèi)使用這些對(duì)象,前綴類(lèi)名,如下所示。
double r = Math.cos(Math.PI * theta);
你可以使用static import語(yǔ)句導(dǎo)入java.lang.Math的靜態(tài)成員,這樣你就不需要為類(lèi)名稱(chēng)添加前綴Math,Math的靜態(tài)成員可以多帶帶導(dǎo)入:
import static java.lang.Math.PI;
或作為一個(gè)組:
import static java.lang.Math.*;
導(dǎo)入后,可以無(wú)限制地使用靜態(tài)成員,例如,之前的代碼段將變?yōu)椋?/p>
double r = cos(PI * theta);
顯然,你可以編寫(xiě)自己的類(lèi),其中包含你經(jīng)常使用的常量和靜態(tài)方法,然后使用static import語(yǔ)句,例如:
import static mypackage.MyConstants.*;
非常謹(jǐn)慎地使用static import,過(guò)度使用靜態(tài)導(dǎo)入會(huì)導(dǎo)致代碼難以閱讀和維護(hù),因?yàn)榇a的讀者不知道哪個(gè)類(lèi)定義了特定的靜態(tài)對(duì)象,正確地使用,static import通過(guò)刪除類(lèi)名重復(fù)使代碼更具可讀性。上一篇:創(chuàng)建和使用包 下一篇:管理源文件和類(lèi)文件
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/72949.html
嵌套類(lèi) Java編程語(yǔ)言允許你在另一個(gè)類(lèi)中定義類(lèi),這樣的類(lèi)稱(chēng)為嵌套類(lèi),如下所示: class OuterClass { ... class NestedClass { ... } } 術(shù)語(yǔ):嵌套類(lèi)分為兩類(lèi):靜態(tài)和非靜態(tài),聲明為static的嵌套類(lèi)稱(chēng)為靜態(tài)嵌套類(lèi),非靜態(tài)嵌套類(lèi)稱(chēng)為內(nèi)部類(lèi)。 class OuterClass { ... stati...
包 本課程解釋了如何將類(lèi)和接口捆綁到包中,如何使用包中的類(lèi),以及如何安排文件系統(tǒng)以便編譯器可以找到源文件。 創(chuàng)建和使用包 為了使類(lèi)型更易于查找和使用,避免命名沖突和控制訪問(wèn),程序員將相關(guān)類(lèi)型的組捆綁到包中。 定義:包是一組提供訪問(wèn)保護(hù)和名稱(chēng)空間管理的相關(guān)類(lèi)型,請(qǐng)注意,類(lèi)型引用類(lèi)、接口、枚舉和注解類(lèi)型,枚舉和注解類(lèi)型分別是特殊的類(lèi)和接口,因此在本課中通常將類(lèi)型簡(jiǎn)稱(chēng)為類(lèi)和接口。 作為Java平臺(tái)一部...
管理源文件和類(lèi)文件 Java平臺(tái)的許多實(shí)現(xiàn)依賴(lài)于分層文件系統(tǒng)來(lái)管理源文件和類(lèi)文件,盡管Java語(yǔ)言規(guī)范不要求這樣做,策略如下。 將類(lèi)、接口、枚舉或注解類(lèi)型的源代碼放在文本文件中,該文件的名稱(chēng)是類(lèi)型的簡(jiǎn)單名稱(chēng),其擴(kuò)展名為.java,例如: //in the Rectangle.java file package graphics; public class Rectangle { ... ...
繼承 在前面的課程中,你已經(jīng)多次看到了繼承,在Java語(yǔ)言中,類(lèi)可以從其他類(lèi)派生,從而從這些類(lèi)繼承字段和方法。 定義:從另一個(gè)類(lèi)派生的類(lèi)稱(chēng)為子類(lèi)(也是派生類(lèi),擴(kuò)展類(lèi)或子類(lèi)),派生子類(lèi)的類(lèi)稱(chēng)為超類(lèi)(也是基類(lèi)或父類(lèi))。 除了Object沒(méi)有超類(lèi),每個(gè)類(lèi)都有一個(gè)且只有一個(gè)直接超類(lèi)(單繼承),在沒(méi)有任何其他顯式超類(lèi)的情況下,每個(gè)類(lèi)都隱式地是Object的子類(lèi)。 類(lèi)可以從派生自類(lèi)的類(lèi)派生的類(lèi)派生,依此類(lèi)推,...
類(lèi)的更多方面 本節(jié)介紹依賴(lài)于使用對(duì)象引用的類(lèi)的更多方面以及你在前面的對(duì)象部分中了解到的點(diǎn)運(yùn)算符。 從方法返回值 方法返回到調(diào)用它的代碼。 完成方法中的所有語(yǔ)句。 到達(dá)return語(yǔ)句。 或拋出異常(稍后介紹)。 以先發(fā)生者為準(zhǔn)。 你在方法聲明中聲明方法的返回類(lèi)型,在方法體內(nèi),使用return語(yǔ)句返回值。 聲明為void的任何方法都不返回值,它不需要包含return語(yǔ)句,但它可能會(huì)這樣做,在這種...
閱讀 3747·2021-10-11 10:59
閱讀 1336·2019-08-30 15:44
閱讀 3506·2019-08-29 16:39
閱讀 2913·2019-08-29 16:29
閱讀 1835·2019-08-29 15:24
閱讀 846·2019-08-29 15:05
閱讀 1284·2019-08-29 12:34
閱讀 2384·2019-08-29 12:19