JAVA編程思想學習總結:第六章——訪問權限控制

/*此總結的主要內容是我在學習JAVA過程中,認爲需要記憶的知識點。並結合之前自己學習C++及javascript的相關知識,註明JAVA在一些情況下與這兩門語言的相同及不同之處。*/

(1)包

類庫實際上是一組類文件。其中每個文件都有一個public類,以及任意數量的非public類。因此每個文件都有一個構件。如果希望這些構件從屬於同一個羣組,就可以使用包。
利用package和import關鍵字將單一的全局名字空間分割開。
package語句必須是文件中的第一行非註釋程序代碼。
從根目錄開始,解釋器獲取包名稱並將每個句點替換成反斜槓,得到 路徑會與CLASSPATH中的各個不同的項相連接,解釋器就在這些目錄中查找與所要創建的類名稱相關的.class文件(包括java解釋器所在位置的標準目錄)。
如果兩個不同的包被同時引用,且包含相同的類名,在引用該類時,在類名前帶包名可以解決該同名問題。
忠告:無論何時創建包,都已經在給定包的名稱的時候隱含地指定了目錄結構。這個包必須位於其名稱所指定的目錄中,而該目錄必須是在以CLASSPATH開始的目錄中可以查詢到的。

(2)權限修飾詞

public:接口訪問權限。其成員聲明對每個人可用。
默認包:如果類沒有給自己設定任何包名稱,java將這樣的文件自動看作隸屬於該目錄的默認包中,它爲該目錄中所有其他的文件都提供了包訪問權限。
private:私有訪問權限。僅該類本身的成員可以使用private成員。
protected:繼承訪問權限。對該類的子類也可見,同時也提供包訪問權限。
對構造函數使用private可以阻止別人直接訪問某個特定的構造器。如果默認構造器是唯一定義的構造器,並且是private,它將阻止此類的繼承。
訪問權限的控制其實就是下表。
 

同一個類

同一個包

不同包的子類

不同包的非子類

Private

     

Default

   

Protected

 

Public


(3)類的訪問權限

1、每個編譯單元都只能有一個public類。
2、public類的名稱必須完全與含有該編譯單元的文件名相匹配,包括大小寫。
3、編譯單元內允許不帶public類。
類既不可以是private的(這樣會使得除該類之外,其他任何類都不可以訪問它),也不可以是protected(該條限制對內部類除外)。所以對於類的訪問權限,僅有兩個選擇:包訪問權限或public。如果不希望任何人對該類擁有訪問權限,可以把所有構造器指定爲private,從而阻止任何人創建該類的對象,但是有一個例外,就是你在該類的static成員內部可以創建。
示例如下:
package accessControl;
class Soup1{
	
	private Soup1(){};
	public static Soup1 makeSoup(){//靜態方法創建對象並返回,可以用來在返回引用之前做額外的工作。
		return new Soup1();
	}
}
class Soup2{
	private Soup2(){}
	private static Soup2 ps1=new Soup2();
	public static Soup2 access(){//這種特定的模式被稱爲singleton(單例),因爲只能創建它的一個對象,只能通過靜態public方法訪問
		return ps1;
	}
	public void f(){}
}
public class Lunch {
	void testPrivate(){
		//無法直接創建對象
		//Soup1 soup =new Soup1();
	}
	void testStatic(){
		Soup1 soup =Soup1.makeSoup();
	}
	void testSingleton(){
		Soup2.access().f();
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章