03_2_JAVA中的面向對象與內存解析
03_2_JAVA中的面向對象與內存解析
1. 成員變量
成員變量可以是Java語言中任何一種數據類型(包括基本數據類型和引用數據類型)
在定義成員變量時可以對其初始化,如果不對其初始化,Java使用默認的初始值。
如下列表:
成員變量類型 |
取值 |
byte |
0 |
short |
0 |
int |
0 |
long |
0L |
char |
‘\u0000’ |
float |
0.0F |
double |
0.0D |
boolean |
false |
所有引用類型 |
null |
成員變量的作用範圍為整個類體。
2. 引用
Java語言中除基本類型之外的變量類型都稱之為引用類型。
Java中的對象是通過引用個對其操作的。
3. 如何在內存中區分類和對象
類是靜態的概念,代碼區
對象是new出來的,位於堆內存,類的每個成員變量在不同的對象中都有不同的值(除了靜態變量)而方法只有一份,執行的時候才占用內存。
4. 對象的創建和使用
必須使用new關鍵字創建對象。
使用對象(引用).成員變量或來引用對象的成員變量。
使用對象(引用).方法(參數列表)來調用對象的方法。
同一類的每個對象有不同的成員變量存儲空間。
同一類的每個對象共享該類的方法。
5. 構造方法(構造函數)
使用new + 構造方法創建一個新的對象。
構造函數是定義在Java類中的一個用來初始化對象的函數。
構造函數與類同名且沒有返回值。
例如:
public class Person {
int id;
int age;
Person(int n, int i) {
id = n;
age = i;
}
}
當沒有指定構造函數時,編譯器為類自動添加形如
類名() {} 的構造函數。
6. 約定俗成的命名規則
類名的首字母大寫
變量名和方法名的首字母小寫
運用駝峰標識
7. 調用過程演示
Test test = new Test();
int date = 9;
BirthDate d1 = new BirthDate(7,7,1970);
BirthDate d2 = new BirthDate(1,1,2000);
test.change1(date);
test.change2(d1);
test.change3(d2);
......
public void change1(int i) {
i = 1234;
}
public void change2(BirthDate b) {
b = new BirthDate(22, 2, 2004);
}
public void change3(BirthDate b) {
b.setDay(22);
}
圖1
圖2 date將9傳給形參i ,i = 9
圖3 i 被設置為 1234
圖4 方法change1調用完畢之後,i值消失
圖5 調用change2 將d1的值 傳給 b
圖6 b 跟 d1 指向同一對象
圖7 b 並賦予新值 重新指向另一對象
圖8 方法change2調用完畢之後, b消失,以及對象也消失 (堆裏面的對象,有可能不是馬上消失,而是在垃圾回收的時候,消失。)
圖9 調用change3 b被傳遞為d2的值,而和d2指向同一對象
圖10 day被改成22了
圖11 change3調用完畢 b消失
03_2_JAVA中的面向對象與內存解析