以一種組建化的形式進行代碼設計
1)在面向對象程序設計中包含有如下幾種特性
•封裝性:保護內部結構的安全性
•繼承性:在已有的程序結構上擴充新的功能
•多態性:在某一個該娘范圍內滿足
2)面向對象開發分為以下幾個步驟:
OOA(面向對象分析)
OOD(面向對象設計)
OOP(面向對象編程)
1)了解類與對象的關系
♦認識類與對象
類與對象是整個面向對象之中最基礎的組成單元,類是共性的一個集合,而對象是某一個體的產物。
例如:
人類(姓名,年齡,工作,除了這些屬性類還包括一些方法比如吃飯,玩等等)
對象(對象就是具體到某一個人)
類實際上是對象操作的模板,但類不可以直接使用,必須通過實例化對象來使用
2)掌握類與對象的定義結構
♦類與對象的基本定義
一個類需要包含屬性和方法
定義類:
1 public class ClassDemo1 { //定義一個類類現在已經產生了,但是如果要使用類,就必須得實例化對象。
實例化對象的兩種方式:
•聲明並實例化對象: 類名稱 對象名稱 = new 類名稱() ;
•分布完成:
類名稱 對象名稱 = null;
對象名稱 = new 類名稱() ;
引用數據類型與基本數據類型最大的區別就是,引用數據類型需要內存的開辟及使用,關鍵字 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的引用傳遞給P3 15 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的引用傳遞給P3 15 p3.name = "張博傑" ; //p3修改了姓名和年齡 16 p2.eat() ; //調用Person2類中的eat()方法 17 } 18 }
通過內存的分析可以看出來,在引用數據關系裡面,一塊沒有棧內存指向的堆內存的空間,就將成為垃圾,所有的垃圾會被垃圾回收機制(GC)不定期的進行回收,回收之後就會釋放掉其所占的內存。
總結:
1、類描述的是公共的特征,類必須要實例化對象才可以使用。
2、堆內存中保存的是所有屬性的內容,而棧內存保存的是堆內存的地址。
3、垃圾空間指的是沒有棧內存空間引用的堆內存空間。