標籤:
-
指標:指向某個記憶體位址的變數。它有兩個屬性:地址值和指標類型。
null 指標:不指向任何記憶體位址的指標。
指標類型可告訴編譯器應該怎樣進行接下來的資料訪問。int類型和float類型就不是一樣的。舉個例,如:Cat cat = null;就告訴了cat變數是cat類型,則編譯器會讓cat變數去訪問Cat類型資料;也即相當於在聲明變數時完成了Cat類型的初始化,所以即使是Cat cat = null;這種情況,cat變數也能訪問到到Cat類的靜態成員,而不會報null 指標,如果去訪問Cat類的普通成員,則會報null 指標,因為普通成員必須要在new之後才存在於堆記憶體中的。所以,我們可以說null是一個只有類成員的對象(萬物皆對象)。
還有一個解釋:在Java裡,對象調用類成員時,實際上是委託類本身來調用的,所以null對象能調用類成員而不報null 指標。
-
基礎資料型別 (Elementary Data Type)用”==”判斷值是否相等
兩個引用變數用”==”判斷引用變數存的地址值是否相等,”==”不能用於比較類型上沒有父子關係的兩個對象,那樣會報錯。
equals()方法是Object類的方法,它規定與自身作比較才相等(即兩個對引用變數指向的是同一個對象才相等)。可通過重寫它自訂相等規則。如參考型別String類的equals()方法就是重寫Object類的equals方法,它的規定是:只要內容相等或是與對象本身作比較就相等。
Java用常量池管理曾經用過的字串,執行String str = “java”; 時,常量池就會緩衝一個”java”,若再執行String s =”java”;則系統會直接讓s指向之前緩衝的java,所以str與s共用一個對象,因此str == s 的結果為true;
-
關於final
- final修飾的成員變數必須顯示賦值,不然該成員變數失去了存在的意義。
- final修飾的類變數,要麼在靜態塊中賦值,要麼在聲明時就賦值。
- final修飾的執行個體變數,要麼在普通初始化塊和構造器中賦值,要麼在聲時就賦值。
- final修飾的類不可被繼承,修飾的方法不可被重寫,但可被重載。
- 宏變數:被final修飾且在定義時就賦好初值的變數。編譯時間,會將所有用到宏變數的的地方都直接替換成該變數的值。樣本:
//1.聲明非宏變數 String a = "ja"; String b = "va"; System.out.print(a+b == "java");//結果為false //2.聲明宏變數 final String a = "ja"; final String b = "va"; System.out.print(a+b == "java");//結果為true //這裡的a、b是宏變數,所以會直接替換成它的值,所以此時的a+b直接就是"java"。
-
關於抽象類別
1. 抽象類別不能被執行個體化,主要用於被繼承;抽象方法主要用被重寫。抽象類別樣本:public abstract class A{}
2. static與abstract不能同時修飾方法,但可同時修飾內部類。
-
關於介面
1. 與抽象類別和普通類的單繼承多實現不同,介面可多繼承多實現。
2. 介面體現的是規範與實現相分離的設計哲學,抽象類別體現的是一處模板式設計。
3. 介面不能包含初始化塊、構造器、普通成員變數、普通方法,而抽象類別均可包含,且能全是普能方法。
4. 介面的所有成員都用public 修飾。
5. 介面的成員變數必須用public static final 修飾,不指定時預設是它們。
6. 介面中的方法必須是public abstract 修飾, 不指定時預設是它們。
-
內部類
如何使用:Out.Int in = new Out().new Int(); //in就代表內部類Int的執行個體對象。
-
匿名內部類
- 如果一個介面的實作類別須使用多次,則定義成獨立類,但只使用一次時,則應該定義成匿名內部類。
- 匿名內部類裡不能定義構造器,但可以定義初始化塊來完成需要構造器完成的事。
- 匿名內部類格式:new 介面(或類){ 重寫 },只需要重寫一次某個類的方法時,可使用匿名類內部類。
- 匿名內部類訪問的外部局變數預設是final修飾的。
-
緩衝原理
需要重複訪問的資料,如果在資料庫或硬碟等外部系統中,則訪問擷取時會很慢,如果把這些資料緩衝到記憶體裡,每次擷取先看緩衝裡有沒有,有就直接取,沒有就從外部系統中擷取後放到緩衝裡,以供下次直接從緩衝裡取。
註:如果Integer採用Integer.valueOf(99)建立對象,則會緩衝該對象,即99會放進緩衝裡。Integer只緩衝 -128~127之間的對象。
物件導向(下)知識點