類(對象)之間的關係
1. 關聯關係(某一個類的方法的參數是另一個類的對象)
2. 繼承關係(XX是一種XX)
3. 彙總關係(整體和部分) (XX是XX的一部分)
4. 實現關係(類似C++的純虛函數,具體實現用子類來完成)
對象是Java程式的核心,在Java程式中“萬事萬物皆對象”
對象可以看成時靜態屬性(成員變數)和動態屬性(方法)的封裝體
成員變數可以是Java語言中任何一種資料類型(包括基本類型和參考型別)
在定義成員變數時可以對其初始化,如果不對其初始化,Java使用預設的值對其初始化(所有數實值型別的預設值都是0, 布爾類型初始值為false, 參考型別初始值為null)
注意:局部變數Java不會預設初始化
成員變數的作用範圍為整個類體
Java語言中除基本類型之外的變數類型都稱之為參考型別!!與C++不一樣
Java中的對象是通過引用對其操作的,例如:String S; 這是聲明了一個String類型的引用變數,會分配記憶體,但並沒有使它指向一個對象。
S = new String("HelloWorld");使用new語句建立了一個String類型的對象並用S指向它,以後可以通過S完成對其的操作
如何在記憶體中區分類和對象
1. 類是靜態概念,位於代碼區
2. 對象是new出來的,位於堆記憶體,類的每個成員變數在不同的對象中都有不同的值(除了靜態變數),而方法只有一份,在執行的時候才佔用記憶體
Java中的引用同C++中的引用不一樣,Java中的引用相同於指標,而C++的引用只是一個別名
對象的建立和使用
1. 必須使用new關鍵字建立對象
2. 使用對象(引用).成員變數或引用對象的成員變數
3. 使用對象(方法).方法(參數列表)來調用對象的方法
4. 同一類的不同對象有不同的成員變數儲存空間
5. 同一類的不同對象共用該類的方法
樣本:
class C { int i; int j; ...main..{ C c1 = new C(); C c2 = new C(); }}
代碼存放在code segment中,當main方法執行的時候,先定義C類型的變數才c1(c1中的值不是實際的物理地址),會在棧中分配一個空間,然後new出一個對象在堆記憶體中,棧空間中的c1指向堆空間中剛new出來的那個對象.(感覺就是先建立指標再建立該指標指向的那個資料類型的執行個體,然後指標指向那個執行個體)
使用new + 構造方法 建立一個新的對象
構造方法是定義在java類中的一個用來初始化對象的函數
構造方法與類同名且沒有傳回值,若沒有定義構造方法,系統會預設生產一個空的構造方法,若自己定義了構造方法,系統就不會生產預設構造方法。注意:預設構造方法會將所有成員變數都初始化(所有能轉換為整數的類型都初始化為0,boolean初始化為false)如果構造方法前面加上了傳回值,那麼這個方法就變成了普通的方法,可通過對象名.成員函數名來調用