歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java基礎面向對象之類與對象

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  類名稱() ;

        引用數據類型與基本數據類型最大的區別就是,引用數據類型需要內存的開辟及使用,關鍵字 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、垃圾空間指的是沒有棧內存空間引用的堆內存空間。

Copyright © Linux教程網 All Rights Reserved