1. 程式人生 > >T-2-java面向對象

T-2-java面向對象

成員內部類 cep exception string 實例化 依賴 也會 防止 地方

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

T-2-java面向對象