Java瘋狂講義讀書筆記第五章

  1. 類是一種自定義的數據類型,可以用類來定義變量,用類定義的變量都是引用變量,他們將會引用到類的對象,引用變量存於棧內存,實際對象放在堆內存。
  2. 類常見三大成員:成員變量、成員方法、構造器。各成員之間可以相互調用,static修飾的成員不能訪問沒有static修飾的成員。
  3. 成員變量用於定義該類的數據,方法用於定義類的功能,構造器用於構造該類的實例,Java通過new來調用構造器,從而返回該類的實例。
  4. static用於修飾方法、成員變量,static修飾的成員表明他屬於這個類本身而不是該類的單個實例,可以通過類調用,也可以通過實例來調用。
  5. this關鍵字總是指向調用該方法的對象,構造器中應用該構造器正在實例化的對象,在方法中引用調用該方法的對象。
  6. 方法重載(@overload),方法名相同,參數不相同,不關心返回值相等與否。僅僅返回值不一樣系統報錯。
  7. 當系統加載類或者創建類的實例的時候,將自動爲成員變量分配內存空間,並自動爲成員變量賦初值。
  8. 局部變量定義後必須進過顯示的初始化後才能使用,爲變量賦初值,系統纔會爲局部變量分配內存。
  9. 棧內存中的變量無需系統垃圾回收,一般隨方法或代碼塊的結束而結束。
  10. 訪問控制符,private < default < protected < public。private只能同一個類中訪問(表頭設置居中失敗了。。)

    類所在位置\修飾符 private default protected public
    同一個類中 true true true true
    同一個包中 true true true
    子類中 true true
    全局範圍內 true
  11. public修飾的類,文件名必須與類名一致,外部類只能使用public或默認訪問控制符修飾,因爲它不在任何一個類內部,private和protected無效。
  12. 構造器(構造方法)用於創建對象時初始化,可重載。
  13. 爲了在構造器B中調用構造器A的初始化代碼,又不希望重新創建一個Java對象,用this關鍵字來調用構造器A。
  14. 重寫(@Override),子類重寫繼承於父類的方法。方法名、形參列表相同,返回值類型比父類原函數返回值類型更小或相等,拋出的異常比父類方法聲明拋出的異常更小或相等。
  15. 如果父類的方法是private類型,對子類就是隱藏的,子類無法重寫。
  16. 在調用父類的構造方法時,super必在子類構造方法的第一行,否則會報錯。
  17. super用於限定該對象調用從父類繼承得到的實例變量或方法。
  18. 所謂多態就是指程序中定義的引用變量所指向的具體類型和通過該引用變量發出的方法調用在編程時並不確定,而是在程序運行期間才確定,即一個引用變量倒底會指向哪個類的實例對象,該引用變量發出的方法調用到底是哪個類中實現的方法,必須在由程序運行期間才能決定。

    public class BaseClass {
        public int book = 66;
        public void base() {
            System.out.println("父類的普通方法");
        }
        public void test() {
            System.out.println("父類的方法,會被子類覆蓋");
        }
    }
    public class AddClass extends BaseClass{  //AddClass子類
    public void test() {
        System.out.println("B子類覆蓋父類的方法");
    }
    
    public void sub() {
        System.out.println("B子類的普通方法");
    }
    }
    public class SubClass extends BaseClass{  //SubClass子類
    public void test() {
        System.out.println("子類覆蓋父類的方法");
    }
    
    public void sub() {
        System.out.println("子類的普通方法");
    }
    
    public static void main(String[] args) {
        BaseClass p = new SubClass();
            p.base();  //調用父類的普通方法
            p.test();  //調用SubClass子類重寫父類的test();方法
        BaseClass p1 = new AddClass();
            p1.base();  //調用父類的普通方法
            p1.test();  //調用AddClass子類重寫父類的test();方法
    }
    }
    
    

    多態實例

  19. instanceof前一個操作符通常是一個引用類型變量,後一個操作數通常是一個類或者接口,用於判斷前面的對象是否是後面的類,或者子類、實現類的實例。
  20. instanceof運算符的作用是在進行強制類型轉換之前,判斷是否可以成功轉換,保證代碼的健壯性。
  21. 編譯時類型,引用變量定義的類型。運行時類型,引用變量初始化時的類型。
  22. 不要在父類的構造器中調用將要被子類重寫的方法,因爲子類實例化時使用父類的構造器將執行子類重寫的方法,而此時子類對象爲null,將引發空指針異常。
  23. 初識化塊是類的第四個成員,創建對象時,系統先調用類裏定義的初始化塊,如果有兩個,前面的先執行,後面的隨後執行,構造方法隨後再執行。

    public class Person {
    public int a;
    
    // 初始化代碼塊
    {
        a = 9;
    }
    
    // 系統默認的無參構造方法,會執行但無法初始化屬性的值,如果裏面寫上this.a = 99;則a的值變爲99
    public Person() {
    
    }
    
    public static void main(String[] args) {
        Person person = new Person();
        System.out.println(person.a);  //輸出 a 的值爲9
    }
    }
    
  24. 繼承中有靜態初始化塊,非靜態初始化塊,無參構造方法,有參構造方法(父類、子類都有)的執行順序:
    父類靜態初始化塊—>>子類靜態初始化塊—>>父類非靜態初始化塊—>>父類無參構造方法—>>父類的有參構造方法—>>子類非靜態初始化塊—>>子類無參構造方法—>>子類的有參構造方法。
  25. 有初始化塊存在時,系統默認的無參的構造方法不能給屬性初始化爲初值。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章