1. 參考型別(reference type):參考型別是用在對象上的。一個對象可以被多個引用所指向,但同一時刻,每個引用只能指向唯一的一個對象。如果一個對象被多個引用所指向,那麼無論哪個引用對對象的屬性進行了修改,都會反映到其他的引用當中。
2.在java裡,永遠無法直接操作對象,對對象的所有操作都是通過對象的引用來間接完成的。
public class People
{
int age = 20;
public void change(People people)
{
people = new People();
people.age = 30;
}
public static void main(String[] args)
{
People people = new People();
int age = people.age;
System.out.println(age); //輸出 20
people.change(people);
int age2 = people.age;
System.out.println(age2); //還是輸出20
}
}
People people=new People(); //這句話在記憶體的堆中產生了一個 People類型的對象,並且在記憶體的棧中產生了一個 People類型的引用,這個引用指向了堆中產生的People類型的對象
people.change(people); //傳到方法的時候建立了一個新的引用,也指向剛才在堆中產生的People類型的對象
public void change(People people)
{
people = new People(); //在記憶體的堆中又產生了一個 People類型的對象,並將方法中的那個引用從指向舊的People對象改成指向這個新的對象
people.age = 30; //這裡通過新的引用修改的是方法中新產生的對象的age屬性,而不是外面那個對象的age屬性
}
3. 如果一個類包含了屬性與方法,那麼該類的每一個對象都具有自己的屬性,但無論一個類有多少個對象,這些對象共用同一個方法(引用同一個方法)。
4. 關於方法參數傳遞的總結:對於Java中的方法參數傳遞,無論傳遞的是原生資料類型還是參考型別,統一是傳值(pass by value),而不是傳遞記憶體位址。C#裡面有ref可以傳遞記憶體位址
5. 什麼類型的引用就能指向什麼類型的對象,不能指向其他類型的對象,比如People類型的引用就能指向People類型的對象,但不能指向Student類型的對象。比如:
People people = new People(); // 正確
People people = new Student(); //錯誤(前提是People類不是Student類的父類,若是則這句話就對了)
6. 構造方法(Constructor):構造方法用於完成對象屬性的初始化工作,構造方法的特點:
a) 構造方法的名字必須與類名完全一致(包含大小寫)
b) 構造方法沒有傳回值,連void也不能出現。
c) 如果在定義一個類的時候,沒有為類聲明構造方法,那麼Java編譯器會自動為類添加一個沒有參數且方法體為空白的構造方法(預設的構造方法)
d) 如果在定義一個類的時候,為類聲明了構造方法,那麼Java編譯器就不會再為類添加構造方法了。
e) 不能顯式調用類的構造方法,構造方法通常是通過new關鍵字隱式調用。
7. 預設的構造方法:構造方法沒有參數且方法體為空白。
8. new關鍵字在產生對象時完成了三件事情:
a) 為對象開闢記憶體空間。(包括為執行個體變數初始化,執行初始化塊)
b) 調用類的構造方法進行對象的一系列的初始化。
c) 將產生的對象的地址返回。
9. 使用new來產生對象的時候,後面的小括弧()表示構造方法的參數列表,如果構造方法不接收參數,那麼小括弧中的內容為空白;如果構造方法接收參數,那麼小括弧中的實際參數就需要與構造方法定義中的形式參數保持一致(參數數量一致、參數類型一致、按照順序逐一賦值)。