- 什么是類?
- 怎樣定義一個類?
- 什么是對象,類和對象之間是什么關系,怎樣創建一個對象?
- 對象引用和對象在內存中是如何分配的?
- 什么是類?
2. 類是個抽象的概念,用來模擬一類事物,一旦定義了一個類,這個類就永遠存在。
比如:人,人有男人和女人,他們都有身高,體重等相同的屬性,他們都具有走路,吃飯,工作等這些相同的,可動態執行的操作,所以可以定義“人類”這樣一個類來包含他們相同的屬性和功能。
- 怎樣定義一個類?
1 /** 2 @author zst 3 @version 1.0 4 */ 5 public class Person{ 6 private String name; 7 private int age; 8 9 public void work(){ 10 11 } 12 }
說明: 1. 類名稱首字母要大寫,如果要定義的類名稱由多個單詞組成,則每個單詞的首字母都要大寫2. 如果是對外公開的方法需要用“public”關鍵字修飾在上面Person類中:1. name,age 稱為類數據成員,或字段2. work () 稱為類的成員函數,或方法
- 什么是對象,類和對象之間是什么關系,怎樣創建一個對象?
1. 對象是類的一個個體,是具體的,實實在在存在的事物,它有自己的生命周期,由類可以創建出對象,對象也會消亡。
2. 類一旦被建立后,就可以用這個類創建出任意個對象,然后去操作這些對象,類是抽象的,對象是具體的。
3. 對象也叫實例,是一個真實的實體。
關系: 1. 如果把對象比作是實實在在存在一輛汽車,那么類就是這輛汽車的設計圖紙,當然通過設計圖紙(類)還可以制造第二輛,第三輛這樣的汽車(對象)。
2. 如上,通過Person類可以創建出一個叫“小明”的對象,也可以創建出另一個叫“阿黃”的對象。
創建一個對象的過程也叫類的實例化,使用new關鍵字來創建對象。
1 Person xiaoMing = new Perosn();
如上就是創建一個對象的過程:執行了兩步操作:
1.
Person xiaoMing:聲明了一個叫
xiaoMing的
Person類的對象引用。
2.
new
Perosn
():創建一個Person對象,此時
xiaoMing指向創建出來的對象,也經常把
xiaoMing稱為對象名。
- 對象引用和對象在內存中是如何分配的?
1 /** 2 @author zst 3 @version 1.0 4 */ 5 class A 6 { 7 int i = 10; 8 int j = 10; 9 public static int k = 20; 10 11 public void f() 12 { 13 System.out.println("我是A類對象的方法"); 14 } 15 } 16 public class ObjectMemoryAllocation 17 { 18 public static void main(String[] args) 19 { 20 A aa = new A(); 21 aa.f(); 22 23 } 24 }
在上面代碼中:
A aa =new A(); 這行代碼是創建對象的過程(類的實例化)。
A aa :聲明對象的引用變量,這個變量是在棧(stack)內存中分配的,它存儲着一個內存地址,該地址指向執行new A()后在堆中分配的一塊內存。
new A(): 創建一個對象,該對象是在堆(heap)內存中動態分配的。
如下圖:


注:
1. new出來的對象都是在堆(heap)中分配的
2. 局部變量(如對象引用變量)都是在棧(stack)中分配
3. 靜態變量(被static修飾的變量)和字符串常量存儲在數據段(Data Segtment)中
4. 代碼段(Code Segment)中存放代碼