java基礎學習筆記01

1.成員變量與局部變量的區別:

    ①定義的位置不同:

        成員變量定義在類中;

        局部變量定義在方法中;

    ②在內存中的位置不同:

        成員變量在堆中

        局部變量在棧中

    ③生命週期不同:

        成員變量隨着對象的出現而出現,隨着對象的消失而消失

        局部變量隨着方法的調用而出現,隨着方法的彈棧而消失

    ④初始化不同:

        成員變量隨着對象的出現而分配空間,有默認值

        局部變量隨着被使用而分配空間,若只聲明不開闢內存空間,沒有默認值

2.傳說中的匿名對象

假設有個Car類,有num,color 2個成員變量,和一個run()方法可以打印num的值,這裏有2中寫法:

    ①:Car car = new Car();

          car.color="red";

          car.num="5";

            car.run();

    ②new Car().color="red";

第二種寫法就是匿名對象

侷限性:第②句執行完後該對象就變成了垃圾,因爲並沒有引用指向該對象,垃圾回收器將回收該對象所佔內存。

使用匿名對象的場景:當對對象的方法進行調用,並且只需要調用一次時,可以使用之

3.繼承的實質:

繼承的實質是拷貝一份父類所有的成員變量和方法到自己裏面,其中包括父類的私有成員變量和方法。然後便與原本的父類沒有了任何關係,子類的super()方法,構造的實際也只是拷貝到自己內部的父類的代碼構造出的對象。如圖:

 

 

當在main函數中執行:

Student s= new Student();

s.printNum();

Person p =new Person();

p.printNum();

會發現p.printNum()的結果仍然是10;子類中的super.num=20並不能改變原本父類的num屬性,改變的只是拷貝到自己內部的父類代碼構造出來的對象的num屬性.

而且,若父類Person有一個私有的成員變量,子類繼承時也會一起拷貝過去,只是受訪問權限控制,子類不能直接訪問,但若父類提供一個公有的get方法,就可以通過該方法獲取該私有屬性,同樣獲得的也是拷貝的代碼構造的對象所擁有的該屬性。總之,無論如何,子類與它的繼承的那個父類已經沒有了聯繫,它不能改變原本那個父類的狀態,它對父類的操作實際上都只是在操作它拷貝的那個副本而已。

當子類與父類有重名的成員或者方法時,並且訪問權限不是private時,子類繼承時會隱藏它們,若想調用之,可以用super關鍵字

4.構造代碼塊和局部代碼塊

構造代碼塊:存放各個構造函數中的相同函數,每次構造對象,構造代碼塊中的代碼都會被執行,在類中用{}包括的代碼就是構造代碼塊

局部代碼塊:可以控制局部變量的生命週期,用於優化內存空間,在main中用{}包括的代碼就是構造代碼塊

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章