Java 基礎(chǔ)隨記
- Java中的this
this是指當(dāng)前對象自己。在寫一個方法的時候曲楚,如果想在方法內(nèi)部獲得對當(dāng)前對象的引用就可以用this厘唾。this表示對“調(diào)用方法的那個對象”的引用。也就是說this指的是方法所屬的類的對象的引用龙誊。
- 調(diào)用當(dāng)前對象中的成員變量或方法:
this.當(dāng)前對象中的成員變量或方法
- 調(diào)用當(dāng)前對象的構(gòu)造方法:
this(參數(shù))
- 內(nèi)部類
內(nèi)部類提供了更好的封裝抚垃,可以把內(nèi)部類隱藏在外部類之內(nèi),不允許同一個包中的其他類訪問該類趟大;
內(nèi)部類的方法可以直接訪問外部類的所有數(shù)據(jù)鹤树,包括私有的數(shù)據(jù)。
-
例子:
//外部類HelloWorld public class HelloWorld { // 內(nèi)部類Inner逊朽,類Inner在類HelloWorld的內(nèi)部 public class Inner { // 內(nèi)部類的方法 public void show() { System.out.println("welcome to imooc!"); } } public static void main(String[] args) { // 創(chuàng)建外部類對象 HelloWorld hello = new HelloWorld(); // 創(chuàng)建內(nèi)部類對象 Inner i = hello.new Inner(); // 調(diào)用內(nèi)部類對象的方法 i.show(); } }
- Java 中的靜態(tài)內(nèi)部類
靜態(tài)內(nèi)部類是 static 修飾的內(nèi)部類魂迄,這種內(nèi)部類的特點是:
靜態(tài)內(nèi)部類不能直接訪問外部類的非靜態(tài)成員,但可以通過 new 外部類().成員 的方式訪問
如果外部類的靜態(tài)成員與內(nèi)部類的成員名稱相同惋耙,可通過“類名.靜態(tài)成員”訪問外部類的靜態(tài)成員;如果外部類的靜態(tài)成員與內(nèi)部類的成員名稱不相同熊昌,則可通過“成員名”直接調(diào)用外部類的靜態(tài)成員
創(chuàng)建靜態(tài)內(nèi)部類的對象時绽榛,不需要外部類的對象,可以直接創(chuàng)建 內(nèi)部類 對象名= new 內(nèi)部類();
-
代碼:
//外部類 public class HelloWorld { // 外部類中的靜態(tài)變量score private static int score = 84; private int scoree = 23; // 創(chuàng)建靜態(tài)內(nèi)部類 public static class SInner { // 內(nèi)部類中的變量score int score = 91; public void show() { // 只能訪問score婿屹,不能訪問scoree System.out.println("訪問外部類中的score:" + HelloWorld.score ); System.out.println("訪問內(nèi)部類中的score:" + score); } } // 測試靜態(tài)內(nèi)部類 public static void main(String[] args) { // 直接創(chuàng)建內(nèi)部類的對象 SInner si = new SInner(); // 調(diào)用show方法 si.show(); } }
繼承
- 父類的private方法是無法被子類訪問或覆蓋的
- 創(chuàng)建一個子類對象時灭美,程序內(nèi)部執(zhí)行順序為:
- 父類屬性初始化
- 父類構(gòu)造方法(
super();
) - 子類屬性初始化
- 子類構(gòu)造方法
- super
- 子類的構(gòu)造過程必須調(diào)用父類的構(gòu)造方法
- 子類的構(gòu)造方法中如果沒有顯示調(diào)用父類構(gòu)造方法昂利,則默認(rèn)調(diào)用無參構(gòu)造
- 顯示調(diào)用父類構(gòu)造方法必須在第一行
- 如果沒有顯示調(diào)用届腐,而父類又沒有無參構(gòu)造方法,編譯時則報錯
Java中的final和static
- final
- 聲明 final 字段有助于優(yōu)化器作出更好的優(yōu)化決定蜂奸,因為如果編譯器知道字段的值不會更改犁苏,那么它能安全地在寄存器中高速緩存該值。
- final 字段還通過讓編譯器強制該字段為只讀來提供額外的安全級別扩所。
- final可以修飾變量围详、方法及類;
- 當(dāng)定義一個final變量時祖屏,jvm會將其分配到常量池中助赞,程序不可改變其值,相當(dāng)于一個常量袁勺,初始化可以在兩個地方雹食,一是其定義處,也就是說在final變量定義時直接給其賦值期丰,二是在構(gòu)造函數(shù)中群叶,不能不賦值吃挑;
- 當(dāng)修飾一個方法時,該方法在子類中將不能被重寫盖呼;
- 當(dāng)修飾一個類時儒鹿,該類不能被繼承。
- static
靜態(tài)成員或類成員:它屬于整個類所有几晤,而不是某個對象所有约炎,即被類的所有對象所共享。靜態(tài)成員可以使用類名直接訪問蟹瘾,也可以使用對象名進行訪問圾浅。
靜態(tài)方法或類方法:
-
靜態(tài)方法中可以直接調(diào)用同類中的靜態(tài)成員,但不能直接調(diào)用非靜態(tài)成員憾朴。
-
如果希望在靜態(tài)方法中調(diào)用非靜態(tài)變量狸捕,可以通過創(chuàng)建類的對象,然后通過對象來訪問非靜態(tài)變量众雷。
-
靜態(tài)方法中不能直接調(diào)用非靜態(tài)方法灸拍,需要通過對象來訪問非靜態(tài)方法。
-
Java 中的 static 使用之靜態(tài)初始化塊
- 例子:
- 結(jié)果:
- 結(jié)論:
- 程序運行時砾省,靜態(tài)初始化塊最先被執(zhí)行鸡岗,然后執(zhí)行普通初始化塊,最后才執(zhí)行構(gòu)造方法编兄。
- 靜態(tài)初始化塊只在類加載時執(zhí)行一次轩性,所以當(dāng)再次創(chuàng)建對象 hello2 時并未執(zhí)行靜態(tài)初始化塊。
- instanceof語句
- A instanceof B
- 用于判斷對象A是不是B類型狠鸳,進而判斷是否可以裝化揣苏。
- 抽象類abstract
- 應(yīng)用場景:
- 在某些情況下,某個父類只是知道其子類應(yīng)該包含怎樣的方法件舵,但無法準(zhǔn)確知道這些子類如何實現(xiàn)這些方法
- 從多個具有相同特征的類中抽象出一個抽象類卸察,以這個抽象類做為子類的模板,從而避免子類設(shè)計的隨意性
- 作用:限制規(guī)定子類必須實現(xiàn)某些方法芦圾,但不關(guān)注實現(xiàn)細(xì)節(jié)
- 使用規(guī)則:
- abstract定義抽象類
- abstract定義抽象方法蛾派,只有聲明,不需要實現(xiàn)
- 包含抽象方法的類是抽象類
- 抽象類中可以包含普通的方法个少,也可以沒有抽象方法
- 抽象類不能直接創(chuàng)建洪乍,可以定義引用變量抽象方法沒有方法體以分號結(jié)束
- 代碼例子:
-
父類:
-
則子類為:(自動添加父類中的方法)
- 由例子可知可用于寫模板