T-2-java面向對象
阿新 • • 發佈:2019-02-14
成員內部類 cep exception string 實例化 依賴 也會 防止 地方 一、類
- 類對象的數據結構定義,方法是對象的行為。
- 類是數據類型。
- 一個類可以創建多個對象,這多個對象結構相同,數據不同。
- 類中可以包含:(1)成員變量(對象的共同特征,靜的);(2)方法(對象的共同行為,動的,常常用作操作成員變量)
- 一個.java文件可以包含多個類,但是public的類只能有一個,並且這個類的名字必須和文件的名字一樣,實際編碼中建議一個文件只放一個類。
- 對象的產生有三種方式:(1)工廠方法;(2)構造器new;(3)依賴註入。
- 引用類型聲明的變量,通常稱為引用。
- new出來的對象存儲在堆中。
- 創建對象時,給成員變量分配空間,並賦默認值。
- 通過引用對堆中的數據進行訪問。
- 成員變量存儲在堆中,局部變量存儲在棧中。
- 基本類型之間,“=”是賦值;引用類型之間,“=”意味著指向同一個對象。
- 當引用類型為null時,不能做任何“.”的操作,不然運行時會提示“NullPointerException”。
- 一個類中不可以有簽名完全相同的方法。
- 在一個類中,多個方法的方法名相同,參數列表不同,稱為方法的重載。(跟返回值無關)
- 由編譯器根據方法的簽名來調用不同的方法。
- 與類同名,沒有返回值,也沒有返回類型。
- 在創建對象時,編譯器會自動調用。
- 構造方法的作用是,初始化成員變量。
- 若自己不寫構造方法,編譯器給無參構造,若自己有寫,編譯器則不再提供。
- 構造方法(構造器)初始化對象,一般是初始化對象的數據(有時也會有算法)。
- this用於指代當前對象,誰調用指的就是誰。
- 當成員變量和局部變量重名時,需要用this關鍵字來指向成員變量。
- this([參數]); 用於調用本類的構造方法,如:this();
- this在運行期間,引用調用方法的對象。
- 堆中用於存儲程序中所創建的對象,包含成員變量。
- 成員變量生命周期:創建對象時存在,對象被回收時消失。
- 當一個對象沒有被引用時,屬於被回收的範圍,由垃圾回收器不定時進行回收。
- 垃圾回收過程時透明的(看不到的),若想快些,用String.gc(); 建議快些回收。
- 內存泄漏是指不再使用的對象,沒有被及時回收。建議:不再被使用的對象,及時將其引用設置為null。
- 棧中用於存儲所有的局部變量,基本類型直接存儲的是值,引用類型存儲的是地址。
- 方法調用時,在棧中開辟一個棧幀,棧幀中存儲該方法的參數以及局部變量,當方法調用結束,棧幀被清除,局部變量隨之消失。
- 方法區用用於存儲類的相關信息,以及類中方法的定義,每個類只被裝載一份。
- 父類中放子類所共有的東西,子類中放子類所特有的東西。
- 當繼承發生後,子類具有父類的成員以及本類中的成員。
- java只支持單一繼承。
- 繼承具有傳遞性。
- java規定,在子類構造之前,必須先構造父類。
- 在子類構造方法中,編譯器默認假如super(); 用於調用父類無參的構造。
- super(); 用於調用父類構造方法,必須位於子類構造方法中的第一句。
- 父類的引用,可以指向子類的對象,叫做向上造型。
- 訪問類中的成員,是根據引用的類型,而不是對象的類型。
- 方法重寫。當子類方法和父類方法的方法簽名相同時,子類重寫了父類的方法。
- 當重寫發生時,只要和子類相關,調用的就是子類重寫後的方法。
- super方法可以訪問父類的方法。(註意static環境下不能使用super)
- 重寫是子類重寫了父類的行為,運行期間,根據對象的實際類型,調用相應的方法。
- 包package的作用:避免命名沖突。
- 建議每個類都放在對應的包中,包名所有字母小寫。
- 當聲明包和類後,類的全稱為:包名.類名
- 為了避免繁瑣,建議通過import來聲明類。
- public 公有的,所有類都可以訪問。
- private 私有的,只能本類訪問。
- protected 受保護的,只能子類或同包可以訪問。
- 沒有定義修飾符,默認只能同包類可以訪問。
- 訪問修飾符,只能用來修飾成員變量和方法,不能用來修飾局部變量。
- static修飾成員變量,屬於類,存在方法區中,只有一份,通過類名來訪問。
- static修飾方法,通常用作工具方法以及工廠方法。靜態方法通過類名來訪問。
- static方法中,不能使用this關鍵字。靜態方法是和對象無關的方法。
- static塊,屬於類的代碼塊,只執行一次,常用於加載靜態資源。
- static方法中,只能直接訪問static成員,訪問非static成員,需要先new出對象。
- 靜態變量是公共的,非靜態變量(也叫實例變量),是屬於某個對象的。
- final修飾變量,不可被改變。
- final修飾方法,不可被重寫。(防止子類在定義新方法時,造成“不經意”重寫)
- final修飾類,不可被繼承。(可以保護類不被繼承修改,控制濫用繼承對系統造成的危害)
- static final 修飾的成員變量稱為常量,必須聲明同時初始化。
- static final 常量會在編譯期被替換。
- 由abstract修飾的方法為抽象方法,抽象方法只有方法的定義,沒有方法體實現,用一個分號結尾。
- 一個類中,如果包含抽象方法,該類應該用abstract關鍵字聲明為抽象類。
- 如果一個類繼承了抽象類,必須重寫其抽象方法(除非該類也聲明為抽象類)。重寫所有的抽象方法,子類就是一個普通的類,不重寫抽象方法,子類也必須是抽象類。
- 抽象類不可以實例化。
- 即使一個類中,沒有抽象方法,也可以將其定義為抽象類。(意義在於這個類不想被實例化)
- abstract和final不可以同時用於修飾一個類,因為final關鍵字使得類不可以繼承,而abstract修飾的類如果不可以繼承將沒有任何意義。
- 抽象類的定義:(1)為子類提供了公共的類型。(2)封裝子類中重復的內容(父類特性)。(3)可定義抽象方法,由子類用不同的方法體重寫。
- 接口定義了一個標準的規範。
- 接口可以看作特殊的抽象類,其中只能包括抽象方法和常量。
- 實現類(子類)通過implements來實現接口,實現接口必須實現接口中所有的抽象方法。
- java規定,一個類可以實現多個接口,用逗號分隔,當又想繼承又想實現接口時,先繼承父類再實現接口。
- 接口是一種數據類型,可以向上造型:接口名 引用 = new 實現類
- 接口之間可以相互繼承,使用extends關鍵字。
- 向上造型。(1)一個類的對象可以向上造型的類型有:a.父類的類型,b.其實現的接口類型。(2)java編譯器根據類檢查調用方法是否匹配。
- 強制轉型。(1)可以將父類和接口看作大類型,子類看作為小類型。(2)小到大,自動向上造型;大到小,需強制類型轉換。(3)強轉時,看對象。(4)強轉有兩種情況能成功:a.對象就是那個類型;b.對象實現了那個接口。(5)強轉之前,最好通過 instanceof判斷,語法:if (引用 instanceof 數據類型){...}
- 多態的意義:(1)一個類型的引用在指向不同的對象時會有不同的實現。(2)同樣一個對象,向上造型成不同類型時,會有不同的功能。
- 聲明在類內部的類,就是內部類。使用內部類的目的,是為了封裝類的定義,使得它只在類的內部有效。
- 在內部類中,可以使用Out.this來訪問外部類的屬性和方法。(不寫的話默認有)
- 成員內部類,必須使用外部類實例來創建對象。
- 成員內部類對象可以訪問外部類的屬性和方法。
- 在內部類中,Outer.this與this:(1)可以省略Outer.this訪問外部類的對象的屬性和方法。(2)可以省略this.內部類對象的屬性和方法。(3)如果不能區分外部屬性和當前屬性的時候,不能省略。
- 封裝類的定義在方法中。
- 匿名內部類的語法“簡潔”方便。
- 語法過於簡潔,不容易分辨。
- 是在聲明類時,同時創建了一個對象的語法現象。
- 匿名內部類,一定從父類繼承(實現),一定有父類型(類,抽象類,接口)。
- 公有類:public class Foo(任何地方可以見)
- 默認類(同包類):class Foo(當前包中可見,用的不多)
- 成員內部類:在一個類內部聲明(默認private)
- 匿名內部類:在方法中定義(最徹底的封裝)
T-2-java面向對象