[Thiinking in Java]自閉學習之路(一)構造器

前言-html

本文是爲我的學習作的整理性質的筆記,確定帶有許多不妥的地方,僅供參考。java

(第五章·初始化與清理 《Thinking in Java》)設計模式

 

構造器:架構

  什麼是構造器?:C++中引入了構造器的概念,這是一個在建立對象時被自動調用的特殊方法,在Java中也是如此,經過提供構造器,來確保每個對象的初始化。ide

  爲何要構造器?:使用構造器有助於減小錯誤,並使代碼更容易閱讀。函數

  構造器長什麼樣子?:構造器採用與類名相同的名稱,二者必須徹底相同,因此「每一個方法首字母小寫」的編碼風格並不適合構造器。性能

  

  不接受任何參數的構造器叫作「默認構造器」,Java中一般使用的術語稱之爲「無參構造器」學習

 

  p.s: 優化

    1·從概念上講,「初始化」/「建立」是彼此獨立的,然而在Java代碼中你卻找不到對initialize()的明確調用。在Java中,「初始化」/「建立」的捆綁在一塊兒的,二者不能分離。編碼

    2·構造器是一種特殊的方法,由於它沒有返回值(這與void很像),可是返回值爲空(void)儘管方法自己不會自動返回什麼,可是你仍可讓他返回一些東西。構造器則不會有任何返回值。

    3·new 表達式確實返回了新建對象的引用,可是構造器自己並無返回值(假若有返回值,而且可讓人自由選擇返回類型,那麼勢必deranged編譯器知道該如何處理此類型)。      

    4·雖然沒有顯式的使用static關鍵字,可是構造器實際上也是靜態方法(這在初始化順序裏會提到)。

練習1/2

 

方法重載:

  大多數程序設計語言裏(尤爲是C中),要求爲每個方法(也被稱爲函數)都提供一個獨一無二的標識符。

  在Java(和C++)裏,由於構造器的名字已經由類名所肯定,方法的重載就顯得格外的重要。爲了方法名相同而其中的形式參數不一樣的方法同時存在,就必須用到方法的重載。

  ※形式參數:在定義函數時函數名後面括號中的變量名稱稱爲形式參數(簡稱形參),即形參出如今函數定義中。

  怎樣區分重載:

    1·方法名字相同,參數不一樣(甚至參數的順序也能夠區分,但最好不要這樣作)。

    2·因爲基本類型能夠從一個「較小」的類型自動的轉變成一個「較大」的類型,此過程一旦涉及到重載,就會出現一些混淆。

      ※若是傳入的數據類型(實參/實際參數類型)小於方法中聲明的形式參數類型,實際數據類型就會被提高。「char」型略有不一樣,她會直接上升至「int」型。

      ※若是傳入的數據類型較大,就得經過類型轉化來進行窄化轉換(強制轉換或其餘轉換方法)。

    3·切記!!!不能經過返回值的類型區分重載的方法。

      例如:

        void f(){ };

        int f(){return 1};

     在"int i=f();"中的確能夠區分,可是有時候你並不關心方法的返回值,像這樣調用方法:" f(); "這時候就不能區分該調用哪一個方法了。

 

系統會幫你建立默認構造器

  默認構造器(又名無參構造器),她的做用的建立一個默認對象。若是你寫的類中沒有構造器,編譯器將會自動幫你建立一個無參的默認構造器。

  ※若是你已經寫了一個構造器,編譯器就不會幫你建立了(若是你只寫了一個帶有參數的構造器,因爲編譯器不會幫你建立默認構造器了,因此你在建立對象的時候也必須提供參數。除非你又單獨寫了一個無參的構造器)。

 

練習3/4/7
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!");
    }
}
練習5/6

 

額外內容:重載,重構與重寫(三重)

  重構:經過調整程序代碼改善軟件的質量、性能,使其程序的設計模式和架構更趨合理。提升軟件的擴展性和維護性。通俗點說,重構就是當你發現代碼的不足之處時,去改動它的結構,去優化它。

  • 重構的具體作法:能夠經過重寫或者重載等,但不限於此,更改註釋、更改函數名類名等,均可以稱之爲重構;
  • 重構的目的       :是爲了讓軟件容易維護, 修改其Bug等。

 

  重寫:子類經過@override來實現方法重寫。在父類裏聲明瞭一個模糊的方法,並不給出詳細的行爲,在子類裏,經過重寫父類(同方法名,參數,返回值等)中的這種方法,讓這種方法實例化,去適合子類。

  • override(Overwrite):是子類覆蓋基類的方法。
  • 重寫的特色:

    一、必須是在繼承裏,

    二、方法名、返回值類型、參數個數和參數類型 都必須相同

    三、派生類重寫的方法的訪問權限不能低於基類的權限

    四、派生類拋出的異常應該和基類相等或比基類更小

 

重載:是經過方法的參數識別不一樣的函數 。好比你有一個AMethod()不帶參數,而後你用了一個另外相同名稱的方法,帶一個參數AMethod(String para), 這個過程就叫作重載。

 

重寫與重載的區別:

  1.重寫必須繼承,重載不用。

  2.重寫的方法名,參數數目相同,參數類型兼容,重載的方法名相同,參數列表不一樣。

  3.重寫的方法修飾符大於等於父類的方法,重載和修飾符無關。

  4.重寫不能夠拋出父類沒有拋出的通常異常,能夠拋出運行時異常。

總結:

  重寫:是對方法自己從新編寫。

  重載:函數名相同 參數個數不一樣。

  重構:重寫算是重構的一部分,但重構還包括對程序結構的優化。

                              參考連接:1.重寫、重構、重載區別

                                   2.java中,重構、重載、重寫

相關文章
相關標籤/搜索