Java知識點模組化(1)—— 物件導向

來源:互聯網
上載者:User

標籤:buffer   步驟   線程   1.4   nts   ==   java知識點   oom   1.2   

前言  這是我整理的Java筆記,分模組會陸續上齊,具體連結如下:  1.物件導向:http://www.cnblogs.com/Gabby/p/6857406.html  2.集合:  3.IO:  4.多線程:  5.JVM:  6.其他知識點:序列化,泛型,註解,異常,反射:1.物件導向1.1 物件導向的三大特徵1.1.1 繼承1)類的繼承(1)基本定義Java的繼承具有單繼承的特點,通過關鍵字extends實現。父類和子類的關係:一般和特殊的關係,子類是父類的一種特殊形式,例如水果和蘋果。(2)重寫當父類的方法無法滿足子類的方法時,需要重寫父類的方法,使用override進行重寫。重寫步驟:兩同兩小一大兩同:方法名相同 + 參數列表相同兩小:子類傳回值類型 <= 父類傳回值類型 + 子類方法聲明拋出異常 <= 父類聲明拋出異常一大:子類方法存取權限 >= 父類方法存取權限(3)super 關鍵字有兩個作用:調用被子類重寫的父類的方法:當覆蓋方法是執行個體方法時,使用super;當覆蓋方法為類方法時,用父類類名。子類調用父類的構造器:super用於限定該構造器初始化的是該對象從父類繼承得到的執行個體變數。如果是類變數,則使用父類類名。(4)繼承的缺點:會破壞父類的封裝性。子類可以直接存取父類的成員變數和方法,從而造成子類和父類的嚴重耦合。(5)設計父類需要滿足的規則
  • 盡量隱藏父類的內部資料,盡量將成員變數設定成private;
  • 不要讓子類隨意訪問,修改父類的方法。父類作為輔助的工具方法應用private修飾;父類方法需要外部類訪問,則使用public修飾;父類方法需要子類重寫,則使用protect修飾;
  • 盡量不要在父類構造器中調用將被子類重寫的方法。
(6)派生子類需要滿足的條件
  • 子類是一種特殊的父類,需要滿足"子類 is 父類"的關係;
  • 子類需要額外增加屬性,而不僅僅是屬性值的改變
  • 子類需要增加自己專屬的行為方式(包括新增方法或重寫父類的方法)
2)組合實作類別複用的手段:繼承和組合。(1)組合定義將該類當成另一個類的組成成分,從而允許新類直接複用該類的public方法。組合把舊類對象作為新類的成員變數組合進來,用以實現新類的功能,通常需要在新類裡使用private修飾被組合的舊類方法。(2)繼承和組合的區別
  • 繼承是對已有的類的一番改造,以此獲得一個特殊的版本。就是將一個較為抽象的類改為一個滿足特殊需求的類;繼承表達的是"is a "的關係。
  • 組合表達的是整體和部分的關係,表達的是"has a " 的關係。
1.1.2 封裝1. 定義將對象狀態資訊隱藏在對象內部,不允許外部程式直接存取對象內部資訊,而是通過該類所提供的方法來實現對內部資訊的操作和訪問。2. 良好的封裝需要滿足:將對象的成員變數和實現細節隱藏起來,不允許外部直接存取;把方法暴露出來,讓方法來控制對這些成員變數進行安全的訪問和操作。3. 存取控制符
  private default protect public
同一個類中
同一個包中  
子類中    
全域範圍內      
1.1.3 多態1.定義編譯時間類型由聲明該變數時使用的類型決定,運行時類型由實際賦給該變數的對象決定。如果編譯時間類型和運行時類型不一致,就可能出現了所謂的多態。多態:相同類型的變數,調用同一個方法呈現出不同的行為特徵。對象的執行個體變數不具備多態性。2.編譯時間多態:方法重載3.運行時多態:方法重寫1.2 類1.2.1 類的構成1)成員變數(1)定義在類中定義的變數。分為執行個體變數(不以static修飾的)和類變數(以static修飾的)。(2)類變數類變數使用static修飾,是從該類的準備階段起開始存在,直到系統完全銷毀這個類,類變數的範圍與這個類的生存範圍相同;(3)執行個體變數執行個體變數則從該類的執行個體被建立起開始存在,知道系統完全銷毀這個執行個體,執行個體變數的範圍與對應執行個體的生存範圍相同。(4)成員變數的記憶體運行機制當系統第一次使用一個類時會載入這個類並初始化這個類,在類的準備階段,系統將會為該類的類變數分配記憶體空間並指定預設初始值。當類初始化完成後,系統會為該類分配一塊記憶體區,該記憶體區包含了類變數的記憶體,當系統建立一個對象時,執行個體變數是在建立執行個體時分配記憶體空間並指定初始值的。(5)局部變數的初始化和記憶體中的運行機制局部變數是在方法中定義的變數。局部變數定義後,必須經過顯式初始化後才能使用,系統不會為局部變數執行初始化,局部變數總是儲存在其所在方法的棧記憶體中。如果局部變數是基本類型的變數,則直接把這個變數的值儲存在該變數對應的記憶體中;如果局部變數是參考型別的變數,則這個變數裡存放的是地址,通過該地址引用到堆中該變數實際引用的對象或數組。棧記憶體中的變數無須系統記憶體回收,往往隨著方法或代碼塊的運行結束而結束。2)方法(1)方法的所屬性static修飾的方法屬於類;沒有static修飾的方法屬於對象。(2)java中的參數傳遞機制:只有一種傳遞方式:值傳遞。將實際參數值的副本傳入方法內,而參數本身不會受任何影響。當傳遞的是基本類型的時候就傳遞值;當為對象時,則傳遞對象的引用地址值。(3)方法重載:兩同一不同兩同:同一類中 + 方法名相同一不同:參數列表不同。3)構造器(1)定義特殊的方法,用於建立執行個體時執行初始化。初始化塊是構造器的補充(2)構造器重載使用this關鍵字調用本類的構造器4)初始化塊(1)定義對Java對象進行初始化操作。定義方法:[修飾符] {//初始化塊的可執行代碼}修飾符只能是static.(2)靜態初始化塊:使用static修飾的初始化塊。用於對整個類進行初始化處理,一般是對類變數執行初始化處理。(3)類的初始化階段:類初始化:執行最頂層父類的靜態初始化塊......執行子類的靜態初始化塊對象初始化:執行最頂層父類的初始化塊執行最頂層父類的構造器......執行子類的初始化塊執行子類的構造器1.3 不可變類1.定義建立該類的執行個體後,該執行個體的執行個體變數是不可改變的。封裝類,java.lang.String都是不可變類。2.建立自訂的不可變類規則:(1)使用private和final修飾該類的成員變數(2)提供帶參構造器,用於根據傳入參數來初始化類裡的成員變數(3)僅為該類的成員變數提供getter方法(4)如果有必要的話,重寫Object類裡的equals和hashcode方法3.String不可變類的好處(1)只有當字串是不可變時,字串池才有可能實現,字串池的實現可以在運行時節約很多堆空間,因為不同的字串變數都指向池中的同一個字串。(2)因為字串是不可變的,所以是安全執行緒的。(3)類載入器要用到字串,不可變類提供了安全性,以便被正確的類載入(4)因為字串是不可變的,所以在它建立的時候hashcode被緩衝,不需要重新計算。1.4 抽象類別和介面1.4.1 抽象類別(1)定義某一個父類只知道其子類應該包含怎樣的方法,但無法準確地知道子類如何?這些方法。只有方法簽名,沒有方法實現。抽象類別和抽象方法使用abstract修飾。抽象類別中可以沒有抽象方法。(2)使用規則
  • 抽象類別和抽象方法必須用abstract修飾,抽象方法不能有方法體。
  • 抽象類別不能執行個體化,無法用new來調用抽象類別的構造器建立執行個體
  • 抽象類別可以包含成員變數,方法(普通方法和抽象方法都可以),構造器,初始化塊,內部類(介面,枚舉)5種成員,主要用於其子類調用
  • 含有抽象方法的類只能定義成抽象類別
1.4.2 介面(1)定義抽象類別的特殊形式,介面不能包含普通方法,介面中所有方法都是抽象方法。使用interface修飾(2)特徵
  • 修飾符:可以用public或省略,省略則預設採用包許可權存取控制符。
  • 一個介面可以繼承多個父介面,但介面只能繼承介面,不能繼承類。
  • 介面中不能包含構造器和初始化塊定義;介面中可以包含成員變數(只能是靜態變數),方法(只能是抽象執行個體方法,類方法或者預設方法),內部類(包含內部介面,枚舉);
  • 靜態常量會自動添加static final 修飾符;
  • 介面中的方法只能用public修飾,不能有實現。類方法和預設方法必須有實現。
(3)作用:被類實現,implements.1.4.3 抽象類別和介面的區別(1)設計目的
  • 介面是多個模組間的耦合標準,類似於系統的“總綱”;
  • 抽象類別作為系統中多個子類的共同父類,它所體現的是一種模板式設計。可以當做中間產品,這個中間產品已經實現了系統的部分功能,但是不能當成最終產品。
(2)用法的不同
  • 方法:介面只能包含抽象方法,靜態方法和預設方法,不能為普通方法提供實現;抽象類別完全可以包含抽象方法。
  • 變數:介面中只能定義靜態變數,不能定義普通成員變數;抽象類別中既能定義靜態變數,也能定義普通成員變數。
  • 構造器:介面中不能包含構造器;抽象類別中能包含構造器。
  • 初始化塊:介面中不能包含初始化塊;抽象類別中能包含初始化塊。
  • 一個類只能單繼承;一個介面能多繼承。
1.5 內部類(1)定義定義在一個類內部的類。(2)作用
  • 內部類提供了更好的封裝,可以把內部類隱藏在外部類之內,不允許同一個包中的其他類訪問該類;
  • 內部類可以直接存取所在類的外部類的私人資料;外部類不能訪問內部類的實現細節;如果外部類需要訪問非靜態內部類的成員,則必須顯示建立非靜態內部類對象來調用訪問執行個體成員。
  • 匿名內部類適合於建立那些僅需一次使用的類。
(3)特性內部類的修飾符可以用private,protected,static.內部類上一級是類,有4個範圍:同一個類(private),同一個包(不使用),父子類(protected),任何位置(public)。非靜態內部類不能擁有靜態成員。1.5.1 靜態內部類(1)定義使用static修飾一個內部類,則這個內部類屬於外部類本身。(2)特性
  • 靜態內部類既可以包含靜態成員,也可以包含非靜態成員;
  • 靜態內部類只能訪問外部類的靜態成員;
  • 靜態內部類寄生在外部類的類本身中,只持有外部類的類引用。
  • 靜態內部類是外部類的一個靜態成員,因此外部類的所有方法,初始化塊都可以使用靜態內部類來定義變數,建立對象等。
  • 外部類可以使用靜態內部類的類名作為調用者來訪問。
1.5.2 局部內部類定義在方法中局部內部類不能使用存取控制符和static修飾符修飾1.5.3 匿名內部類(1)定義適合建立只需要一次使用的類。(2)規則
  • 匿名內部類必須繼承且最多隻能繼承一個父類或實現一個介面;
  • 匿名內部類不能是抽象類別,不能定義構造器。
(3)建立方法需要建立某個介面類型的對象:new 實現介面| 父類構造器{類體部分}1.6 關鍵字1.6.1 static(1)作用用於區分成員變數,方法,內部類,初始化塊這四種成員屬於類本身還是屬於執行個體。(2)特徵static修飾的成員不能訪問沒有static修飾的成員;static修飾成員則表明它屬於這個類本身,稱為類變數或者類方法;1.6.2 this 與 super(1)this作用:指向調用該方法的對象。讓類中的一個方法去訪問該類的執行個體變數或方法。用法:在構造器中使用表示引用該構造器正在初始化的對象;在方法中參考資料表示調用該方法的對象。(2)super使用:在子類中調用父類被覆蓋的執行個體方法;super用於構造器表示該構造器初始化的是該對象從父類繼承得到的執行個體變數。(3)this 和 super的區別super調用其父類的構造器;this調用同一類中重載的構造器。1.6.3 final(1)定義表示不可以改變,不希望子類繼承父類的某一個方法。(2)作用用於修飾類,變數和方法,用以表示類,變數和方法不可變,一旦賦初始值就不能改變。(3)用法修飾成員變數:類變數:必須在靜態初始化塊或者在聲明時指定初始值;執行個體變數:必須在非靜態初始化塊或者聲明變數或者構造器中使用;修飾局部變數:聲明時指定初始值。(3)特性
  • 用final修飾的成員變數需要在聲明處或者構造器或者初始化塊進行賦值;必須由程式員顯式地指定初始值。
  • final修飾基本類型需要值保持不變,不可以重新賦值;final修飾參考型別只需要地址保持不變,可以改變參考型別變數所引用對象的內容。
  • final方法不希望子類重寫父類的某個方法,但是可以被重載;方法使用public則不可以重寫,使用private則可以定義一個一模一樣的方法。
  • final修飾的類不可以有子類。
1.7 其他1.7.1 封裝類(1)來源為8種基礎資料型別 (Elementary Data Type)分別定義了相應的參考型別。類名是基本類型的第一個字母大寫。封裝類的執行個體是參考型別。為什麼要裝箱:因為物件導向的思想,萬物皆是對象(2)自動裝箱和自動拆箱自動裝箱:一個基本類型可以直接賦給對應的封裝類變數或者賦值給Object變數自動拆箱:允許直接把封裝類對象賦給給定的基本類型變數。(3)特性Integer:系統把-128~127之間的整數自動裝箱成Integer執行個體,並放入名為cache的數組中緩衝起來。1.7.2 String,StringBuffer,StringBuilderString:字元序列不可變;會產生很多StringBuffer:字元序列可變,安全執行緒但效能不高;使用synchronized.StringBuilder:字元序列可變,線程不安全但效能略好1.7.3 == 和 equals==:基本類型且是數實值型別,值相同返回true;參考型別對象指向同一個對象時返回true;equals:常量池中字串相同返回true. 

Java知識點模組化(1)—— 物件導向

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.