標籤:oid 屬性 new print 技術分享 height ati 操作方法 設計
java基礎物件導向之類與對象
2017-01-14
1、物件導向的基本概念
以一種組建化的形式進行代碼設計
1)在物件導向程式設計中包含有如下幾種特性
?封裝性:保護內部結構的安全性
?繼承性:在已有的程式結構上擴充新的功能
?多態性:在某一個該娘範圍內滿足
2)物件導向開發分為以下幾個步驟:
OOA(物件導向分析)
OOD(物件導向設計)
OOP(物件導向編程)
2、類與對象
1)瞭解類與對象的關係
?認識類與對象
類與對象是整個物件導向之中最基礎的組成單元,類是共性的一個集合,而對象是某一個體的產物。
例如:
人類(姓名,年齡,工作,除了這些屬性類還包括一些方法比如吃飯,玩等等)
對象(對象就是具體到某一個人)
類實際上是對象操作的模板,但類不可以直接使用,必須通過執行個體化對象來使用
2)掌握類與對象的定義結構
?類與對象的基本定義
一個類需要包含屬性和方法
定義類:
1 public class ClassDemo1 { //定義一個類2 public String name ; //類中的name屬性3 public int age ; //類中的age屬性4 private void eat() { //類中的eat()方法5 System.out.println("我在吃飯");6 }7 }
類現在已經產生了,但是如果要使用類,就必須得執行個體化對象。
執行個體化對象的兩種方式:
?聲明並執行個體化對象: 類名稱 對象名稱 = new 類名稱() ;
?分布完成:
類名稱 對象名稱 = null;
對象名稱 = new 類名稱() ;
引用資料類型與基礎資料型別 (Elementary Data Type)最大的區別就是,引用資料類型需要記憶體的開闢及使用,關鍵字 new 就是開闢記憶體空間,既只要是引用資料類型想要使用,就必須使用關鍵字new來開闢記憶體空間
使用類:
對象.屬性:表示類操作屬性中的內容
對象.方法():表示類操作方法中的內容
1 class Person1{ 2 public String name ; //類中的name屬性 3 public int age ; //類中的age屬性 4 public void eat() { //類中的eat()方法 5 System.out.println("我在吃飯"); 6 } 7 } 8 public class ClassDemo1 { //定義一個類 9 public static void main(String args[]){10 Person1 p1 = new Person1() ; //聲明並執行個體化對象11 p1.eat() ; //調用Person1類中的eat()方法12 }13 }
對以上程式進行分析:
堆記憶體:儲存對象的屬性內容,一般使用new關鍵字來開闢堆記憶體空間
棧記憶體:儲存的是一塊堆記憶體的地址,從嚴格來說占記憶體儲存的是對象的地址,但簡單理解棧記憶體中儲存的就是對象的名稱。
如果只聲明了對象而沒有執行個體化對象就會出現java.lang.NullPointerException(空指向)異常 。 只要是引用資料類型就有可能出現此異常。
3)掌握對象的記憶體分析
引用資料的初步分析
對象的引用傳遞
1 class Person2{ 2 public String name ; //類中的name屬性 3 public int age ; //類中的age屬性 4 public void eat() { //類中的eat()方法 5 System.out.println("姓名:"+name + "年齡"+age); 6 } 7 } 8 public class ClassDemo2 { //定義一個類 9 public static void main(String args[]){10 Person2 p2 = new Person2(); //聲明並執行個體化對象11 p2.name="zhangbojie" ; 12 p2.age = 20 ;13 Person2 p3 = null ;14 p3 = p2 ; //把p2的引用傳遞給P315 p3.name = "張博傑" ; //p3修改了姓名和年齡 16 p3.age = 21;17 p3.eat() ; //調用Person2類中的eat()方法18 }19 }
此時兩個對象指向 的是同一塊記憶體空間,所以任何一個對象修改了屬性的內容,都會影響另一個對象。 在引用操作過程中,一塊堆記憶體可以被多個棧記憶體索引用。但是反過來,一個棧記憶體只能儲存一塊堆記憶體的地址。
繼續觀察引用傳遞
1 class Person2{ 2 public String name ; //類中的name屬性 3 public int age ; //類中的age屬性 4 public void eat() { //類中的eat()方法 5 System.out.println("姓名:"+name + "年齡"+age); 6 } 7 } 8 public class ClassDemo2 { //定義一個類 9 public static void main(String args[]){10 Person2 p2 = new Person2(); //聲明並執行個體化對象11 Person2 p3 = new Person2();12 p2.name="zhangbojie" ; 13 p2.age = 20 ;14 p3 = p2 ; //把p2的引用傳遞給P315 p3.name = "張博傑" ; //p3修改了姓名和年齡 16 p2.eat() ; //調用Person2類中的eat()方法17 }18 }
通過記憶體的分析可以看出來,在引用資料關係裡面,一塊沒有棧記憶體指向的堆記憶體的空間,就將成為垃圾,所有的垃圾會被記憶體回收機制(GC)不週期性進行回收,回收之後就會釋放掉其所佔的記憶體。
總結:
1、類描述的是公用的特徵,類必須要執行個體化對象才可以使用。
2、堆記憶體中儲存的是所有屬性的內容,而棧記憶體儲存的是堆記憶體的地址。
3、垃圾空間指的是沒有棧記憶體空間引用的堆記憶體空間。
java基礎物件導向之類與對象