java自學之路-----繼承 單例設計模式

說明文檔生成{

要用java生成doc,必須爲public類

說明文檔中只提供public protected成員信息

格式:/**   需要在文檔中顯示的信息  */   @param  (寫上參數的信息)  @return   (返回值的信息)

例:

	/**
	獲取整型數組的最大值。
	@param arr 接收一個元素爲int類型的數組。
	@return 該數組的最大的元素值
	*/
	public static int getMax(int[] arr)
	{
		int maxIndex = 0;
		for(int x=1; x<arr.length; x++)
		{
			if(arr[x]>arr[maxIndex])
					maxIndex = x;
		}

		return arr[maxIndex];
	}

命令行 javadoc  -d  文件名(不更換文件直接用 . )  ***.java

生成的說明文檔中可以查看到類中的除private外的所有函數,以及參數列表,

}


繼承{

作用:提高複用性,讓類之間有關係,爲多態提供前提條件

類之間只有單繼承,不直接支持多繼承,因爲有可能多個父類中有共同項產生不確定性

繼承後,子父類出現同名成員,調用的時候子類有則不去父類找

子父類函數相同,繼承後子類覆蓋了父類函數,注意:子函數權限要大於等於父函數權限,子函數爲static父函數必須爲static

構造函數{

1.構造函數不會繼承,子類構造函數的第一行爲一條默認空參數的super(),

2.super()目的是調用父類空參數的構造函數

3.父類中沒有空參數的構造函數的話就編譯失敗,解決辦法是顯示調用父類相應的構造函數

4.所有類都是繼承自object類,所以都有一個默認的空參數的構造函數,裏面有一個空參數的super()以及return語句;

5.構造函數中this()和super()只有一個

}

子類實例化過程{

子類所有構造函數都有默認父類空參數構造函數,子類繼承父類,獲取父類內容,在使用父類內容之前要先看父類是如何對自己的內容進行初始化的

class Father{
		Father(){
				show();
		}
		void show(){
				System.out.println("father show   ");
		}
}
class Son extends Father{
		int i = 8;
		Son(){
				super();//此時 i爲0
				System.out.println("son show   " + i);//此時父類構造函數初始化結束,i爲8
		}
		void show(){
				System.out.println("son show   " + i);
		}
}
class Demo{
		public static void main(String[] args){
				Son s = new Son();
				s.show();		
		}
}

輸出: 

son show   0

son show   8

son show   8

說明:

1.JVM讀取指定路徑下Father,class文件加載進內存,再讀取Son.class文件加載進內存

2.堆內存中開闢空間分配地址

3.在對象空間中,對對象的屬性默認初始化即把0賦給i

4.調用構造函數進行初始化

5.在構造函數中先到父類構造函數,並進行初始化此時show()應該爲this.show(),即子類的show()

6.父類構造函數初始化之後,對子類屬性進行顯示初始化,把8賦值給i

7.再執行子類構造函數中剩下的初始化語句

8.初始化完畢,將地址賦給引用變量s

}


this與super{

類成員與局部變量同名,用this調用類對象成員,this代表本類對象的引用

子類與父類成員變量同名,用super調用父類成員,super代表父類空間

}

分析程序

        class Father{
		int i = 4;
	}
	class Son extends Father{
		int i = 5;
	}

	class Demo{
		public static void main(String[] args){
			Son son = new son();
		}
	}

main函數進棧——>在方法區先加載父類,再加載子類——>堆內中創建對象(該對象內有兩個變量i,存儲在不同區域,要調用父類i使用super.i)
}

設計模式(僅僅是一種思想,一個解決問題的方案,沒有固定的代碼)之 單例設計模式{

要求該類只能創建一次對象,保證唯一性
方案{
1.有且僅有一個new
2.在本類中直接new
3.定義函數對外提供該new的引用(提供一個靜態方法調用靜態對象而不是直接類名調用靜態對象是 由於函數可以保證可控制性)
}
步驟{
1.私有化該類構造函數
2.new一個對象,賦給靜態引用,保證在靜態函數中被調用
3.定義一個static方法,保證用類名直接調用,返回該對象引用
}
代碼一

	class Single{
		static Single single = new Single();
		private Single(){}	
			
		public static Single getInstance(){
				return single;
		}
	}

稱爲餓漢式,加載類的時候就創建對象。適合在開發中使用


代碼二

	class Single{
		static Single single = null;
		private Single(){}	
			
		public static Single getInstance(){
				if (single == null)
					single = new Single();
				return single;
		}
	}

稱爲懶漢式,延遲加載,等到調用該類函數的時候才創建對象,經常用於面試不適合在開發中使用,因爲在多線程編程時,有可能保證不了對象的唯一性
}

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