java對象及內存管理

1. 靜態變量的初始化
這裏寫圖片描述
輸出結果爲-2.8和17.2
這裏寫圖片描述
這裏寫圖片描述

2. 訪問子類對象

public class Base {
    private int i = 2;
    public Base() {
        System.out.println(this.i);// 2
        this.display();// 0
        System.out.println(this.getClass());// Derived
        // this的編譯類型是Base,無法調用子類的sub()方法
        // this.sub();
    }
    public void display() {
        System.out.println(i);
    }
}

這裏寫圖片描述
Java對象是由構造器構造的嗎?實際上,構造器只是負責對Java對象實例變量執行賦值,在執行構造器之前,該對象所佔的內存已經被分配出來了。
這裏寫圖片描述
由於實例變量經過編譯後會被提取到構造器中,故Base的構造器的第一行代碼其實爲 i=2;
這裏寫圖片描述
(在下面第4點裏面有解釋)

3. 調用被子類重寫的方法
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述

4. 繼承成員變量與繼承方法的區別
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述

5. final “宏變量”
在上面第1點中,若將staitc double initPrice用final修飾,兩處都會輸出17.2:
這裏寫圖片描述
再看一個例子
這裏寫圖片描述
將str1、str2用final修飾即可
這裏寫圖片描述
注:以上內容摘自《瘋狂java程序員的基本修養-李剛》

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