前言-html
本文是爲我的學習作的整理性質的筆記,確定帶有許多不妥的地方,僅供參考。java
(第五章·初始化與清理 《Thinking in Java》)設計模式
構造器:架構
什麼是構造器?:C++中引入了構造器的概念,這是一個在建立對象時被自動調用的特殊方法,在Java中也是如此,經過提供構造器,來確保每個對象的初始化。ide
爲何要構造器?:使用構造器有助於減小錯誤,並使代碼更容易閱讀。函數
構造器長什麼樣子?:構造器採用與類名相同的名稱,二者必須徹底相同,因此「每一個方法首字母小寫」的編碼風格並不適合構造器。性能
不接受任何參數的構造器叫作「默認構造器」,Java中一般使用的術語稱之爲「無參構造器」學習
p.s: 優化
1·從概念上講,「初始化」/「建立」是彼此獨立的,然而在Java代碼中你卻找不到對initialize()的明確調用。在Java中,「初始化」/「建立」的捆綁在一塊兒的,二者不能分離。編碼
2·構造器是一種特殊的方法,由於它沒有返回值(這與void很像),可是返回值爲空(void)儘管方法自己不會自動返回什麼,可是你仍可讓他返回一些東西。構造器則不會有任何返回值。
3·new 表達式確實返回了新建對象的引用,可是構造器自己並無返回值(假若有返回值,而且可讓人自由選擇返回類型,那麼勢必deranged編譯器知道該如何處理此類型)。
4·雖然沒有顯式的使用static關鍵字,可是構造器實際上也是靜態方法(這在初始化順序裏會提到)。
方法重載:
大多數程序設計語言裏(尤爲是C中),要求爲每個方法(也被稱爲函數)都提供一個獨一無二的標識符。
在Java(和C++)裏,由於構造器的名字已經由類名所肯定,方法的重載就顯得格外的重要。爲了方法名相同而其中的形式參數不一樣的方法同時存在,就必須用到方法的重載。
※形式參數:在定義函數時函數名後面括號中的變量名稱稱爲形式參數(簡稱形參),即形參出如今函數定義中。
怎樣區分重載:
1·方法名字相同,參數不一樣(甚至參數的順序也能夠區分,但最好不要這樣作)。
2·因爲基本類型能夠從一個「較小」的類型自動的轉變成一個「較大」的類型,此過程一旦涉及到重載,就會出現一些混淆。
※若是傳入的數據類型(實參/實際參數類型)小於方法中聲明的形式參數類型,實際數據類型就會被提高。「char」型略有不一樣,她會直接上升至「int」型。
※若是傳入的數據類型較大,就得經過類型轉化來進行窄化轉換(強制轉換或其餘轉換方法)。
3·切記!!!不能經過返回值的類型區分重載的方法。
例如:
void f(){ };
int f(){return 1};
在"int i=f();"中的確能夠區分,可是有時候你並不關心方法的返回值,像這樣調用方法:" f(); "這時候就不能區分該調用哪一個方法了。
系統會幫你建立默認構造器
默認構造器(又名無參構造器),她的做用的建立一個默認對象。若是你寫的類中沒有構造器,編譯器將會自動幫你建立一個無參的默認構造器。
※若是你已經寫了一個構造器,編譯器就不會幫你建立了(若是你只寫了一個帶有參數的構造器,因爲編譯器不會幫你建立默認構造器了,因此你在建立對象的時候也必須提供參數。除非你又單獨寫了一個無參的構造器)。
public class Lainxi5_6 { public static void main(String[] args) { // TODO 自動生成的方法存根 Dog dd=new Dog(); dd.barking(" "); dd.howling(12345); dd.barkAndHowl(123," "); dd.barkAndHowl(" ", 122); } } class Dog{ void barking(String s) { System.out.println("dog is barking!"); } void howling(int i) { System.out.println("dog is howling!"); } void barkAndHowl(String s,int i) { System.out.println("dog is barking and howling!"); } void barkAndHowl(int i,String s) { System.out.println("dog is howling and barking!"); } }
額外內容:重載,重構與重寫(三重)
重構:經過調整程序代碼改善軟件的質量、性能,使其程序的設計模式和架構更趨合理。提升軟件的擴展性和維護性。通俗點說,重構就是當你發現代碼的不足之處時,去改動它的結構,去優化它。
重寫:子類經過@override來實現方法重寫。在父類裏聲明瞭一個模糊的方法,並不給出詳細的行爲,在子類裏,經過重寫父類(同方法名,參數,返回值等)中的這種方法,讓這種方法實例化,去適合子類。
一、必須是在繼承裏,
二、方法名、返回值類型、參數個數和參數類型 都必須相同
三、派生類重寫的方法的訪問權限不能低於基類的權限
四、派生類拋出的異常應該和基類相等或比基類更小
重載:是經過方法的參數識別不一樣的函數 。好比你有一個AMethod()不帶參數,而後你用了一個另外相同名稱的方法,帶一個參數AMethod(String para), 這個過程就叫作重載。
重寫與重載的區別:
1.重寫必須繼承,重載不用。
2.重寫的方法名,參數數目相同,參數類型兼容,重載的方法名相同,參數列表不一樣。
3.重寫的方法修飾符大於等於父類的方法,重載和修飾符無關。
4.重寫不能夠拋出父類沒有拋出的通常異常,能夠拋出運行時異常。
總結:
重寫:是對方法自己從新編寫。
重載:函數名相同 參數個數不一樣。
重構:重寫算是重構的一部分,但重構還包括對程序結構的優化。
參考連接:1.重寫、重構、重載區別