Java 基礎隨記
- Java中的this
this是指當前對象自己。在寫一個方法的時候,如果想在方法內部獲得對當前對象的引用就可以用this。this表示對“調用方法的那個對象”的引用。也就是說this指的是方法所屬的類的對象的引用。
- 調用當前對象中的成員變量或方法:
this.當前對象中的成員變量或方法
- 調用當前對象的構造方法:
this(參數)
- 內部類
內部類提供了更好的封裝,可以把內部類隱藏在外部類之內,不允許同一個包中的其他類訪問該類;
內部類的方法可以直接訪問外部類的所有數據,包括私有的數據。
-
例子:
//外部類HelloWorld public class HelloWorld { // 內部類Inner,類Inner在類HelloWorld的內部 public class Inner { // 內部類的方法 public void show() { System.out.println("welcome to imooc!"); } } public static void main(String[] args) { // 創建外部類對象 HelloWorld hello = new HelloWorld(); // 創建內部類對象 Inner i = hello.new Inner(); // 調用內部類對象的方法 i.show(); } }
- Java 中的靜態內部類
靜態內部類是 static 修飾的內部類,這種內部類的特點是:
靜態內部類不能直接訪問外部類的非靜態成員,但可以通過 new 外部類().成員 的方式訪問
如果外部類的靜態成員與內部類的成員名稱相同,可通過“類名.靜態成員”訪問外部類的靜態成員;如果外部類的靜態成員與內部類的成員名稱不相同,則可通過“成員名”直接調用外部類的靜態成員
創建靜態內部類的對象時,不需要外部類的對象,可以直接創建 內部類 對象名= new 內部類();
-
代碼:
//外部類 public class HelloWorld { // 外部類中的靜態變量score private static int score = 84; private int scoree = 23; // 創建靜態內部類 public static class SInner { // 內部類中的變量score int score = 91; public void show() { // 只能訪問score,不能訪問scoree System.out.println("訪問外部類中的score:" + HelloWorld.score ); System.out.println("訪問內部類中的score:" + score); } } // 測試靜態內部類 public static void main(String[] args) { // 直接創建內部類的對象 SInner si = new SInner(); // 調用show方法 si.show(); } }
繼承
- 父類的private方法是無法被子類訪問或覆蓋的
- 創建一個子類對象時,程序內部執行順序為:
- 父類屬性初始化
- 父類構造方法(
super();
) - 子類屬性初始化
- 子類構造方法
- super
- 子類的構造過程必須調用父類的構造方法
- 子類的構造方法中如果沒有顯示調用父類構造方法,則默認調用無參構造
- 顯示調用父類構造方法必須在第一行
- 如果沒有顯示調用,而父類又沒有無參構造方法,編譯時則報錯
Java中的final和static
- final
- 聲明 final 字段有助于優化器作出更好的優化決定,因為如果編譯器知道字段的值不會更改,那么它能安全地在寄存器中高速緩存該值。
- final 字段還通過讓編譯器強制該字段為只讀來提供額外的安全級別。
- final可以修飾變量、方法及類;
- 當定義一個final變量時,jvm會將其分配到常量池中,程序不可改變其值,相當于一個常量,初始化可以在兩個地方,一是其定義處,也就是說在final變量定義時直接給其賦值,二是在構造函數中,不能不賦值;
- 當修飾一個方法時,該方法在子類中將不能被重寫;
- 當修飾一個類時,該類不能被繼承。
- static
靜態成員或類成員:它屬于整個類所有,而不是某個對象所有,即被類的所有對象所共享。靜態成員可以使用類名直接訪問,也可以使用對象名進行訪問。
靜態方法或類方法:
-
靜態方法中可以直接調用同類中的靜態成員,但不能直接調用非靜態成員。
-
如果希望在靜態方法中調用非靜態變量,可以通過創建類的對象,然后通過對象來訪問非靜態變量。
-
靜態方法中不能直接調用非靜態方法,需要通過對象來訪問非靜態方法。
-
Java 中的 static 使用之靜態初始化塊
- 例子:
- 結果:
- 結論:
- 程序運行時,靜態初始化塊最先被執行,然后執行普通初始化塊,最后才執行構造方法。
- 靜態初始化塊只在類加載時執行一次,所以當再次創建對象 hello2 時并未執行靜態初始化塊。
- instanceof語句
- A instanceof B
- 用于判斷對象A是不是B類型,進而判斷是否可以裝化。
- 抽象類abstract
- 應用場景:
- 在某些情況下,某個父類只是知道其子類應該包含怎樣的方法,但無法準確知道這些子類如何實現這些方法
- 從多個具有相同特征的類中抽象出一個抽象類,以這個抽象類做為子類的模板,從而避免子類設計的隨意性
- 作用:限制規定子類必須實現某些方法,但不關注實現細節
- 使用規則:
- abstract定義抽象類
- abstract定義抽象方法,只有聲明,不需要實現
- 包含抽象方法的類是抽象類
- 抽象類中可以包含普通的方法,也可以沒有抽象方法
- 抽象類不能直接創建,可以定義引用變量抽象方法沒有方法體以分號結束
- 代碼例子:
-
父類:
-
則子類為:(自動添加父類中的方法)
- 由例子可知可用于寫模板