當前位置:首頁 » 文件傳輸 » java訪問指示符和相應的作用
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

java訪問指示符和相應的作用

發布時間: 2022-11-08 06:33:08

『壹』 java中訪問控制符的作用

java中訪問控制符的作用是說明被聲明的內容(類、屬性、方法和構造方法)的訪問許可權,就像發布的文件一樣,在文件中標注機密,就是說明該文件可以被那些人閱讀。

訪問控制在面向對象技術中處於很重要的地位,合理的使用訪問控制符,可以通過降低類和類之間的耦合性(關聯性)來降低整個項目的復雜度,也便於整個項目的開發和維護。具體的實現就是通過訪問控制符將類中會被其它類調用的內容開放出來,而把不希望別人調用的內容隱藏起來,這樣一個類開放的信息變得比較有限,從而降低了整個項目開放的信息,另外因為不被別人調用的功能被隱藏起來,在修改類內部隱藏的內容時,只要最終的功能沒有改變,即使改變功能的實現方式,項目中其它的類不需要更改,這樣可以提高了代碼的可維護性,便於項目代碼的修改。

在Java語言中訪問控制許可權有4種,使用三個關鍵字進行表達,依次如下:

lpublic——公共的

lprotected——受保護的

l無訪問控制符——默認的

lprivate——私有的

在實際使用時,類聲明的訪問控制符只有2個:public和無訪問控制符,屬性聲明、構造方法聲明和方法聲明的訪問控制符可以是以上4種中的任何一個。

這4個訪問控制符的許可權作用如下表所示:

在4種訪問控制中,public一般稱作公共許可權,其限制最小,也可以說沒有限制,使用public修飾的內容可以在其它所有位置訪問,只要能訪問到對應的類,就可以訪問到類內部public修飾的內容,一般在項目中開放的方法和構造方法使用public修飾,開放給項目使用的類也使用public修飾。protected一般稱作繼承許可權,使用protected修飾的內容可以被同一個包中的類訪問也可以在不同包內部的子類中訪問,一般用於修飾只開放給子類的屬性、方法和構造方法。無訪問控制符一般稱作包許可權,無訪問控制符修飾的內容可以被同一個包中的類訪問,一般用於修飾項目中一個包內部的功能類,這些類的功能只是輔助其它的類實現,而為包外部的類提供功能。private一般稱作私有許可權,其限制最大,類似於文件中的絕密,使用private修飾的內容只能在當前類中訪問,而不能被類外部的任何內容訪問,一般修飾不開放給外部使用的內容,修改private的內容一般對外部的實現沒有影響。

『貳』 簡要敘述什麼是訪問控制符,列出Java中的訪問控制符,並說明各個訪問控制符的控制許可權

一,非訪問修飾符。

1, 抽象類:
凡是用abstract修飾符修飾的類被稱為抽象類。抽象類就是沒有具體對象的概念類。
抽象類是一種經過優化的概念組織方式:把共同特點抽象出來;其後在描述和處理某一種具體對象時,就只需描述不同的特殊之處。這種組織方式使得所有的概念層次分明,簡潔洗練,非常符合人們日常的思維習慣。
由於抽象類是它的所有子類的公共屬性的集合,所以使用抽象類的一個優點就是可以充分利用這些公共屬性來提高開發和維護程序的效率。
值得一提的是,面向對象技術是要用更接近於人類思維方式的方法來處理實際問題,抽象類的設立就是這種思想的具體體現之一,它是模仿人類的思維模式的產物。

2,最終類:
如果一個類被final修飾符所修飾和限定,說明這個類不可能有子類。
被定義為final的類通常是一些有固定作用、用來完成某種標准功能的類。如Java系統定義好的用來實現網路功能的InterAddress、Socket等類都是final類。
abstract和final修飾符不能同時修飾一個類,因為abstract類自身沒有具體對象,需要派生出子類後在創建子類的對象;而final類不可能有子類。這樣放在一起修飾就沒有意義了。

3,有些類的修飾符也可以用來修飾類中的域或方法:

(1) 域:是類和對象的靜態屬性,定義域的操作就是說明變數或創建對象的操作。

<1> 靜態域:
用static修飾符修飾的域是僅屬於類的靜態域。靜態域是類中每個對象共享的域。他們是類的域,不屬於任何一個類的具體對象。是一個公共的存儲單元,任何一個類的對象訪問它時,取到的都是相同的數值。

<2> 靜態初始化器:
靜態初始化器是由關鍵字static引導的一對大括弧括起的語句組。作用是:在載入時,初始化類的靜態域。
與構造函數相同,他們都是用來完成初始化的工作,但是靜態初始化器與構造函數有三點不同:
①構造函數是對每個新創建的對象初始化,而靜態初始化器是對類自身進行初始化。
②構造函數是在用new運算符產生新對象時由系統自動執行,而靜態初始化器則是在它所屬的類載入到內存時由系統調用執行。
③不同於構造函數,靜態初始化器不是方法,沒有方法名、返回值和參數列表。

<3> 最終域:
用final修飾的域,實際上就是Java中的常量。
用final修飾符說明常量時,需要注意以下幾點:
①需要說明常量的數據類型。
②需要同時指出常量的具體取值。
③因為所有類對象的常量成員,其數值都固定一致,為了節省空間,常量通常聲明為static。

<4> 易失域:
如果一個域被volatile修飾符所修飾,說明這個域可能同時被幾個線程所控制和修改,即這個域不僅僅被當前程序所掌握,在運行過程中可能在其他未知的程序操作影響和改變該域的取值。在使用當中應該特別注意。
通常,volatile用來修飾接受外部輸入的域。如表示當前時間的變數將系統的後台線程隨時修改,以保證程序中取到的總是最新的當前系統時間,所以可以把它定義為易失域。

(2)方法:是類的動態屬性,標志了類所具有的功能和操作。小括弧是方法的標志。

<1> 抽象方法:
修飾符abstract修飾的抽象方法是一種僅有方法頭,而沒有具體的方法體和操作實現的方法。使用抽象方法的目的是使所有的子類,對外都呈現一個相同名字的方法,是一個統一的介面。所有的抽象方法,都必須存在於抽象類之中。

<2> 靜態方法:
用static修飾符修飾的方法,是屬於整個類的類方法,不用的是對象或實例的方法。調用這種方法時,應該使用類名作前綴;這種方法在內存中的代碼段將隨著類的定義而分配和裝載,不被任何一個對象專有;只能處理屬於整個類的成員變數。

<3> 最終方法:
用final修飾符修飾的類方法。功能和內部語句不能再更改的方法,不能再被繼承。
注意:所有已被private修飾符限定為私有的方法,以及所有包含在final類中的方法,都被預設地認為是final的。

<4> 本地方法:
用native修飾符聲明其他語言書寫方法體並具體實現方法功能的特殊的方法。這里的其他語言包括C/C++/FROTRAN/匯編等。由於native的方法的方法體使用其他語言在程序外部寫成,所以所有的native方法都沒有方法體,而用一個分號代替。

<5> 同步方法:
如果synchronized修飾的方法是一個類的方法(即static的方法),那麼在被調用執行前,將把系統類Class中對應當前類的對象加鎖。如果synchronized修飾的是一個對象的方法(未用static修飾的方法),則這個方法在被調用執行前,將把當前對象加鎖。Synchronized修飾符主要用於多線程共存的程序中的協調和同步。

二,訪問控制符。
訪問控制符是一組限定類、域或方法是否可以被程序里的其他部分訪問和調用的修飾符。類的訪問控制符只有一個public,域和方法的訪問控制符有四個,分別是public、private、protected、private protected,另外還有一種沒有定義專門的訪問控制符的預設情況。

1, 公有訪問控制符public:
Java的類是通過包的概念來組織的,包氏類的一個鬆散的集合。處於同一個包中的類可以不需要任何說明而方便的互相訪問和引用,而對於不同包中的類,則不行。但當一個類被聲明為public時,他就具有了被其他包中的類訪問的可能性,只要這些其他包中的類在程序中使用import語句引入public類,就可以訪問和引用這個類。
類中被設定為public的方法是這個類對外的介面部分,避免了程序的其他部分直接去操作類內的數據,這實際就是數據封裝思想的體現。
每個Java程序的主類都必須是public類,也是基於相同的原因。
用public修飾的類的域稱為公共域。如果公共域屬於公共類,則它能被所有的其他類所引用。public修飾符會造成安全性的數據封裝性下降,所以一般應減少public域的使用。

2, 預設訪問控制符:
預設訪問控制權規定,該類只能被同一個包中的類訪問和引用,而不可以被其他包中的類使用,這種訪問特性又稱為包訪問性。
同樣道理,類內的域或方法如果美育訪問控制符來限定,也就具有包訪問性。
簡單說,定義在同一個程序中的所有類屬於一個包。

3,私有訪問控制符private :
用private修飾得域或方法只能被該類自身所訪問和修改,而且不能被任何其他類(包括該類的子類)來獲取和引用。private修飾符用來聲明那些類的私有成員,它提供了最高的保護級別。

4,保護訪問控制符protected :
用protected修飾的成員變數可以被三種類所引用:該類自身、與它在同一個包中的其它類、在其他包中的該類的子類。使用protected修飾符的主要作用是允許其他包中該類的子類來訪問父類的特定屬性。

5,私有保護訪問控制符 private protected :
用private protected修飾的成員變數可以被兩種類訪問和引用,一種是該類本身,一種是該類的所有子類。把同一個包內的非子類排除在可訪問的范圍之外,使得成員變數更專於具有明確繼承關系的類,而不是鬆散地組合在一起的包。

『叄』 java 的訪問修飾符是什麼

Java中的訪問修飾符

Java面向對象的基本思想之一是封裝細節並且公開介面。Java語言採用訪問控制修飾符來控制類及類的方法和變數的訪問許可權,從而向使用者暴露介面,但隱藏實現細節。訪問控制分為四種級別:

(1)public: 用public修飾的類、類屬變數及方法,包內及包外的任何類(包括子類和普通類)均可以訪問;

(2)protected: 用protected修飾的類、類屬變數及方法,包內的任何類及包外那些繼承了該類的子類才能訪問(此處稍後解釋),protected重點突出繼承;

(3)default: 如果一個類、類屬變數及方法沒有用任何修飾符(即沒有用public、protected及private中任何一種修飾),則其訪問許可權為default(默認訪問許可權)。默

認訪問許可權的類、類屬變數及方法,包內的任何類(包括繼承了此類的子類)都可以訪問它,而對於包外的任何類都不能訪問它(包括包外繼承了此類的子類)。default重點突出包;

(4)private: 用private修飾的類、類屬變數及方法,只有本類可以訪問,而包內包外的任何類均不能訪問它。

網上一些資料及一些書上用表格對java訪問修飾符做了清楚的總結,如下表所示:

重要總結:通過上面的分析,我們可以看到:

1.public、private和protected對我們來說沒有任何異議。

2. 頂層類只能用public訪問修飾符和default(默認)訪問修飾符修飾,其中用默認修飾符修飾的類(及沒有任何修飾符的類,如class B{})不能被其他包中的類繼承,這也說明了default(默認)訪問修飾符突出的是包許可權

3. protected:本人做了一次實驗,發現在不同包的子類中,new一個父類對象,並用該父類對象去訪問父類中的用protected修飾的類屬變數和方法時不能訪問,而new一個子類對象時,子類對象可以訪問(說明protected修飾的類可以被其他包中的類繼承)。也可以在子類重寫父類的方法中使用super關鍵字調用。這豈不是和上面表格中的總結(紅色對勾)沖突了?本人也是百思不得其解。最後在網上找到了一個相對比較認可的解釋,如下:

protected修飾符的修飾的成員變數和方法也稱為受保護的成員變數和方法, 受保護的成員變數和方法可以在本類或同一個包中的其它類(包括子類)中通過類的實例進行訪問,也可以被同一個包中的類或不同包中的類繼承,但是不能在不同包中的其它類(包括子類)中通過類的實例進行訪問。

4. 如果一個類使用public修飾,那該類的類名必須與他所在的源文件名相同。一個.java源文件中有且只有一個public類,頂層類只能用public和默認修飾符(即無修飾符)修飾;

5.final修飾的類不能被繼承,沒有子類。

6.abstract修飾的類不能被實例化,必須被子類繼承。類只要有一個抽象方法就必定是抽象類,但抽象類不一定要有抽象方法。

最終總結,就一句話:protected修飾符所修飾的類(這句話中指父類)屬成員變數和方法,只可以被子類訪問,而不管子類是不是和父類位於同一個包中。default修飾符所修飾的類屬成員變數和方法,只可被同一個包中的其他類訪問,而不管其他類是不是該類的子類。protected屬於子類限制修飾符,而default屬於包限制修飾符。

『肆』 JAVA中的四種作用域訪問修飾符以及各自的關鍵字個特點是

private,public,protected,默認不寫(firendly)

1、Class類的訪問許可權:
public:可以供所有的類訪問。
默認:默認可以稱為friendly但是,java語言中是沒有friendly這個修飾符的,這樣稱呼應該是來源於c++。默認的訪問許可權是包級訪問許可權。
即如果寫了一個類沒有寫訪問許可權修飾符,那麼就是默認的訪問許可權,同一個包下的類都可以訪問到,即使可以實例化該類
(當然如果這個類不具有實例化的能力除外,比如該類沒有提供public的構造函數)。

說明:
1、每個編譯單元(類文件)都僅能有一個public class
2、public class的名稱(包含大小寫)必須和其類文件同名。
3、一個類文件(*.java)中可以不存在public class。
這種形式的存在的場景:如果我們在某個包內撰寫一個class,僅僅是為了配合同包內的其他類工作,而且
我們不想再為了撰寫說明文檔給客戶(不一定是現實意義的客戶,可能是調用這個類的類)看而傷腦筋,而且有可能過一段時間之後
有可能會徹底改變原有的做法,並完全舍棄舊版本,以全新的版本代替。
4、class不可以是private和protected。
5、如果不希望那個任何產生某個class的對象,可以將該類得所有構造函數設置成private。但是即使這樣也可以生成該類的對象,就是class的static的成員(屬性和方法)可以辦到。

2、類成員變數的訪問許可權:
public:緊接public的屬性任何類都可以訪問到。可以直接使用ClassName.propertyName。但是從類的封裝性上來考慮將一個類的屬性定義成public一般很少使用,
在定義靜態常量的時候通暢會這樣定義。如:public static final int PAGE_SIZE=10;
private:只有類本身內部的方法可以訪問類的private屬性,當然內部類也可以訪問其外部類的private成員的。(屬性和方法)
默認(friendly):包級可見,同一個包內的類可以訪問到這個屬性,可以直接使用className.propertyName來訪問,但是從類的封裝性特性來說很少這樣使用類的屬性的。
protected:關鍵字所處理的是所謂「繼承」的觀念。對於同一包的其他類,protected=默認,對於不同包的類,如果存在繼承關系,而baseClass存在protected屬性,則可以被其自繼承,而不同包的其他類
則不能訪問類的protected屬性。

3、類的成員方法的訪問許可權:
其從語法角度來講,這些訪問許可權控制符作用於類的方法和作用於類的屬性上的效果是一樣的。
public:所有類可見。
pirvate:只有同一類內部的方法可見,在有就是內部類也可以訪問到。
默認(friendly):包內可見。
protected:繼承可見。

4、訪問許可權存在的理由
1、「讓使用者無法碰觸到他們不該碰觸的東西。」這些東西僅供類的內部機制使用。將某些成員聲明成private,對於使用者來說可以說是一種服務,
因為這樣使用者可以知道哪些是他關注的哪些是不重要的,不需要關注,如此歷來對於使用來說降低了對使用對象認識的難度。
2、(最終要的理由)讓程序設計者可以更動class內部運作方式,而無須擔心波及到客戶端程序。

5、java的「訪問許可權修飾符」賦予classes開發者極具有價值的控制能力。身為classes開發者,如果你的任何改變可以完全不幹擾你的使用者,
你便可以安心改變你的底層實現,因為客戶端程序員無法訪問class的這一部分。
通過今天學習訪問許可權的問題了解到,介面或者抽象等等策略所謂的「實現隱藏」其根本原因並不是說為了隱藏實現的代碼和思路,而是降低使用者的使用難度,以及從維護角度來說可見范圍的控制給程序維護帶來了極大的安全性。

『伍』 在JAVA中四種訪問區分符的作用是什麼

訪問區分符在子類及包之間的訪問許可權
訪問區分符(許可權)在Java中共有四種:public private protected friendly(默認),這四種區分符可以應用在類的不同位置

1、 訪問區分符的使用位置
定義類時,表明類的類型(public 還是默認的friendly)
子類訪問父類的成員時
通過對象訪問成員時
下面具體介紹每一種情況:

2、 在包之間的訪問許可權
定義類時能使用兩種:public 和 friendly(默認)。這種情況下主要是指在包之間的訪問許可權,也就是當是public時,別的包的類和同一個包的類可以訪問到這個類(包括使用這個類實例化對象,或引用它的靜態成員等);當是friendly時那麼就只有在同一個包的類才能訪問到這個類。

3、 在子類訪問父類時
子類訪問父類只有在繼承時才會出現,子類可以訪問父類的public,protected成員,包內的子類可以訪問父類的friendly成員,而包外的不行。
注意:子類和父類可以不在同一個包。

『陸』 java訪問修飾符的解釋,求大神仔細的說下private,protected的作用和差別,如圖代碼解釋下。

public最松的許可權

pretect本類、本包、子類可訪問

默認本類、本包可訪問(也叫包訪問許可權)

private本類可訪問


class的訪問許可權只有public和默認,pretect、private不能修飾類(內部類除外)


你這里是一個內部類,內部類必須依賴於外部類的對象,所以你必須先new一個外部類的對象



『柒』 試敘述Java中成員訪問許可權限定符及其作用是什麼

這幾個?

private 只允許類內部訪問

protected 允許同包內訪問

public 允許所有

『捌』 請回答把類放在包中有什麼作用

別的地方抄的,不過很詳細。

「進行面向對象的設計時,一項基本的考慮是:如何將發生變化的東西與保持不變的東西分隔開。」

這一點對於庫來說是特別重要的。那個庫的用戶(客戶程序員)必須能依賴自己使用的那一部分,並知道一旦新版本的庫出台,自己不需要改寫代碼。而與此相反,庫的創建者必須能自由地進行修改與改進,同時保證客戶程序員代碼不會受到那些變動的影響。
為達到這個目的,需遵守一定的約定或規則。例如,庫程序員在修改庫內的一個類時,必須保證不刪除已有的方法,因為那樣做會造成客戶程序員代碼出現斷點。然而,相反的情況卻是令人痛苦的。對於一個數據成員,庫的創建者怎樣才能知道哪些數據成員已受到客戶程序員的訪問呢?若方法屬於某個類唯一的一部分,而且並不一定由客戶程序員直接使用,那麼這種痛苦的情況同樣是真實的。如果庫的創建者想刪除一種舊有的實施方案,並置入新代碼,此時又該怎麼辦呢?對那些成員進行的任何改動都可能中斷客戶程序員的代碼。所以庫創建者處在一個尷尬的境地,似乎根本動彈不得。
為解決這個問題,Java推出了「訪問指示符」的概念,允許庫創建者聲明哪些東西是客戶程序員可以使用的,哪些是不可使用的。這種訪問控制的級別在「最大訪問」和「最小訪問」的范圍之間,分別包括:public,「友好的」(無關鍵字),protected以及private。根據前一段的描述,大家或許已總結出作為一名庫設計者,應將所有東西都盡可能保持為「private」(私有),並只展示出那些想讓客戶程序員使用的方法。這種思路是完全正確的,盡管它有點兒違背那些用其他語言(特別是C)編程的人的直覺,那些人習慣於在沒有任何限制的情況下訪問所有東西。到這一章結束時,大家應該可以深刻體會到Java訪問控制的價值。
然而,組件庫以及控制誰能訪問那個庫的組件的概念現在仍不是完整的。仍存在這樣一個問題:如何將組件綁定到單獨一個統一的庫單元里。這是通過Java的package(打包)關鍵字來實現的,而且訪問指示符要受到類在相同的包還是在不同的包里的影響。所以在本章的開頭,大家首先要學習庫組件如何置入包里。這樣才能理解訪問指示符的完整含義。

5.1 包:庫單元
我們用import關鍵字導入一個完整的庫時,就會獲得「包」(Package)。例如:
import java.util.*;
它的作用是導入完整的實用工具(Utility)庫,該庫屬於標准Java開發工具包的一部分。由於Vector位於java.util里,所以現在要麼指定完整名稱「java.util.Vector」(可省略import語句),要麼簡單地指定一個「Vector」(因為import是默認的)。
若想導入單獨一個類,可在import語句里指定那個類的名字:
import java.util.Vector;
現在,我們可以自由地使用Vector。然而,java.util中的其他任何類仍是不可使用的。
之所以要進行這樣的導入,是為了提供一種特殊的機制,以便管理「命名空間」(Name Space)。我們所有類成員的名字相互間都會隔離起來。位於類A內的一個方法f()不會與位於類B內的、擁有相同「簽名」(自變數列表)的f()發生沖突。但類名會不會沖突呢?假設創建一個stack類,將它安裝到已有一個stack類(由其他人編寫)的機器上,這時會出現什麼情況呢?對於網際網路中的Java應用,這種情況會在用戶毫不知曉的時候發生,因為類會在運行一個Java程序的時候自動下載。
正是由於存在名字潛在的沖突,所以特別有必要對Java中的命名空間進行完整的控制,而且需要創建一個完全獨一無二的名字,無論網際網路存在什麼樣的限制。
迄今為止,本書的大多數例子都僅存在於單個文件中,而且設計成局部(本地)使用,沒有同包名發生沖突(在這種情況下,類名置於「默認包」內)。這是一種有效的做法,而且考慮到問題的簡化,本書剩下的部分也將盡可能地採用它。然而,若計劃創建一個「對網際網路友好」或者說「適合在網際網路使用」的程序,必須考慮如何防止類名的重復。
為Java創建一個源碼文件的時候,它通常叫作一個「編輯單元」(有時也叫作「翻譯單元」)。每個編譯單元都必須有一個以.java結尾的名字。而且在編譯單元的內部,可以有一個公共(public)類,它必須擁有與文件相同的名字(包括大小寫形式,但排除.java文件擴展名)。如果不這樣做,編譯器就會報告出錯。每個編譯單元內都只能有一個public類(同樣地,否則編譯器會報告出錯)。那個編譯單元剩下的類(如果有的話)可在那個包外面的世界面前隱藏起來,因為它們並非「公共」的(非public),而且它們由用於主public類的「支撐」類組成。
編譯一個.java文件時,我們會獲得一個名字完全相同的輸出文件;但對於.java文件中的每個類,它們都有一個.class擴展名。因此,我們最終從少量的.java文件里有可能獲得數量眾多的.class文件。如以前用一種匯編語言寫過程序,那麼可能已習慣編譯器先分割出一種過渡形式(通常是一個.obj文件),再用一個鏈接器將其與其他東西封裝到一起(生成一個可執行文件),或者與一個庫封裝到一起(生成一個庫)。但那並不是Java的工作方式。一個有效的程序就是一系列.class文件,它們可以封裝和壓縮到一個JAR文件里(使用Java 1.1提供的jar工具)。Java解釋器負責對這些文件的尋找、裝載和解釋(注釋①)。

①:Java並沒有強制一定要使用解釋器。一些固有代碼的Java編譯器可生成單獨的可執行文件。

「庫」也由一系列類文件構成。每個文件都有一個public類(並沒強迫使用一個public類,但這種情況最很典型的),所以每個文件都有一個組件。如果想將所有這些組件(它們在各自獨立的.java和.class文件里)都歸納到一起,那麼package關鍵字就可以發揮作用)。
若在一個文件的開頭使用下述代碼:
package mypackage;
那麼package語句必須作為文件的第一個非注釋語句出現。該語句的作用是指出這個編譯單元屬於名為mypackage的一個庫的一部分。或者換句話說,它表明這個編譯單元內的public類名位於mypackage這個名字的下面。如果其他人想使用這個名字,要麼指出完整的名字,要麼與mypackage聯合使用import關鍵字(使用前面給出的選項)。注意根據Java包(封裝)的約定,名字內的所有字母都應小寫,甚至那些中間單詞亦要如此。
例如,假定文件名是MyClass.java。它意味著在那個文件有一個、而且只能有一個public類。而且那個類的名字必須是MyClass(包括大小寫形式):

package mypackage;
public class MyClass {
// . . .

現在,如果有人想使用MyClass,或者想使用mypackage內的其他任何public類,他們必須用import關鍵字激活mypackage內的名字,使它們能夠使用。另一個辦法則是指定完整的名稱:

mypackage.MyClass m = new mypackage.MyClass();

import關鍵字則可將其變得簡潔得多:

import mypackage.*;
// . . .
MyClass m = new MyClass();

作為一名庫設計者,一定要記住package和import關鍵字允許我們做的事情就是分割單個全局命名空間,保證我們不會遇到名字的沖突——無論有多少人使用網際網路,也無論多少人用Java編寫自己的類。

5.1.1 創建獨一無二的包名
大家或許已注意到這樣一個事實:由於一個包永遠不會真的「封裝」到單獨一個文件裡面,它可由多個.class文件構成,所以局面可能稍微有些混亂。為避免這個問題,最合理的一種做法就是將某個特定包使用的所有.class文件都置入單個目錄里。也就是說,我們要利用操作系統的分級文件結構避免出現混亂局面。這正是Java所採取的方法。
它同時也解決了另兩個問題:創建獨一無二的包名以及找出那些可能深藏於目錄結構某處的類。正如我們在第2章講述的那樣,為達到這個目的,需要將.class文件的位置路徑編碼到package的名字里。但根據約定,編譯器強迫package名的第一部分是類創建者的網際網路域名。由於網際網路域名肯定是獨一無二的(由InterNIC保證——注釋②,它控制著域名的分配),所以假如按這一約定行事,package的名稱就肯定不會重復,所以永遠不會遇到名稱沖突的問題。換句話說,除非將自己的域名轉讓給其他人,而且對方也按照相同的路徑名編寫Java代碼,否則名字的沖突是永遠不會出現的。當然,如果你沒有自己的域名,那麼必須創造一個非常生僻的包名(例如自己的英文姓名),以便盡最大可能創建一個獨一無二的包名。如決定發行自己的Java代碼,那麼強烈推薦去申請自己的域名,它所需的費用是非常低廉的。

②:ftp://ftp.internic.net

這個技巧的另一部分是將package名解析成自己機器上的一個目錄。這樣一來,Java程序運行並需要裝載.class文件的時候(這是動態進行的,在程序需要創建屬於那個類的一個對象,或者首次訪問那個類的一個static成員時),它就可以找到.class文件駐留的那個目錄。
Java解釋器的工作程序如下:首先,它找到環境變數CLASSPATH(將Java或者具有Java解釋能力的工具——如瀏覽器——安裝到機器中時,通過操作系統進行設定)。CLASSPATH包含了一個或多個目錄,它們作為一種特殊的「根」使用,從這里展開對.class文件的搜索。從那個根開始,解釋器會尋找包名,並將每個點號(句點)替換成一個斜杠,從而生成從CLASSPATH根開始的一個路徑名(所以package foo.bar.baz會變成foo\bar\baz或者foo/bar/baz;具體是正斜杠還是反斜杠由操作系統決定)。隨後將它們連接到一起,成為CLASSPATH內的各個條目(入口)。以後搜索.class文件時,就可從這些地方開始查找與准備創建的類名對應的名字。此外,它也會搜索一些標准目錄——這些目錄與Java解釋器駐留的地方有關。
為進一步理解這個問題,下面以我自己的域名為例,它是bruceeckel.com。將其反轉過來後,com.bruceeckel就為我的類創建了獨一無二的全局名稱(com,e,org,net等擴展名以前在Java包中都是大寫的,但自Java 1.2以來,這種情況已發生了變化。現在整個包名都是小寫的)。由於決定創建一個名為util的庫,我可以進一步地分割它,所以最後得到的包名如下:
package com.bruceeckel.util;

『玖』 Java中類有哪些訪問控制修飾符,並指出它們的訪問控製作用范圍

類的訪問控制符只有public與默認兩種;類成員的訪問控制符包括public,private,protected,與默認,java中沒有friendly。public代表允許所有類及成員訪問,private代表僅允許本類成員訪問,protected代表僅允許本類及其子類成員訪問,默認代表允許本包中類及其成員訪問