黑馬程序員——JAVA基礎---類與對象

——Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流! ——

一 定義類

1.類的聲明

在類聲明中,需要定義類的名稱、對該類的訪問權限,以及該類與其他類的關係等。類聲明的格式如下:
[修飾符] class <類名> [extends 父類名] [implements 接口列表]{
}
參數說明:
修飾符:可選參數,用於指定類的訪問權限,可選值爲public、abstract和final。
類名:必選參數,用於指定類的名稱,類名必須是合法的Java標識符。一般情況下,要求首字母大寫。
extends 父類名:可選參數,用於指定要定義的類繼承於哪個父類。當使用extends關鍵字時,父類名爲必選參數。
implements 接口列表:可選參數,用於指定該類實現的是哪些接口。當使用implements關鍵字時,接口列表爲必選參數。關於接口的定義和實現參見6.8節。
說明:本節主要介紹如何使用public關鍵字修飾的公共類(一個類被聲明爲public,就表明該類可以被其他所有的類訪問和引用,也就是說程序的其他部分可以創建這個類的對象、訪問這個類內部可見的成員變量和調用它的可見方法),如何使用abstract關鍵字修飾的抽象類和使用final關鍵字修飾的final類將在後面的章節中介紹。

   public class Fruit {

}

注意:Java的類文件的擴展名爲.java,類文件的名稱必須與類名相同,即類文件的名稱爲類名+“.java”,例如,有一個Java類文件Fruit.java,則其類名爲Fruit。

2.類體
在類聲明部分的大括號中的內容爲類體。類體主要由兩部分構成,一部分是成員變量的定義,另一部分是成員方法的定義。類體的定義格式如下:
[修飾符] class <類名> [extends 父類名] [implements 接口列表]{
定義成員變量
定義成員方法
}
本例主要實現定義一個水果類Fruit,在該類中定義一個表示顏色的屬性color、一個表示種植的方法plant()、一個表示生長的方法grow()和一個表示收穫的方法harvest()。
1)選擇Eclipse主菜單中的“文件”→“新建”→“項目”命令,在打開的“新建項目”對話框中,選中“Java項目”選項,單擊“下一步”按鈕,在打開的“新建Java項目”對話框中,輸入項目名稱“01”,單擊“完成”按鈕完成項目的創建。
2)在包資源管理器中的剛剛創建的項目上,單擊鼠標右鍵,在彈出的快捷菜單中選擇“新建”→“類”命令,在打開的“新建Java類”對話框的“名稱”文本框中輸入類名“Fruit”,單擊“完成”按鈕。

3)在包資源管理器中,打開剛剛創建的類Fruit.java,在該類中定義相應的變量和方法。

public class Fruit {
    public String color="";      //定義顏色成員變量
    //定義種植成員方法
    public void plant(){
        System.out.println("果樹正在種植……");
    }
    //定義生長的成員方法
    public void grow(){
        System.out.println("果樹正在生長……");
    }
    //定義收穫的成員方法
    public void harvest(){
        System.out.println("水果已經收穫……");
    }
}

二 成員變量和局部變量

在類體中的變量定義部分所聲明的變量爲類的成員變量,而在方法體中聲明的變量及方法的參數則稱爲局部變量。

1.聲明成員變量
Java用成員變量來表示類的狀態和屬性,聲明成員變量的基本語法格式如下:
[修飾符] [static] [final] [transient] [ volatile] <變量類型> <變量名>;
參數說明:
修飾符:可選參數,用於指定變量的被訪問權限,可選值爲public、protected和private。
static:可選,用於指定該成員變量爲靜態變量,可以直接通過類名訪問。如果省略該關鍵字,則表示該成員變量爲實例變量。
說明:靜態變量與實例變量的區別:靜態變量在內存中只有一個拷貝,運行時Java虛擬機只爲靜態變量分配一次內存,在加載類的過程中完成靜態變量的內存分配,可以直接通過類名訪問靜態變量,而實例變量則可以在內存中存在多個拷貝,互不影響,每創建一個實例,就會爲實例變量分配一次內存。
final:可選,用於指定該成員變量爲取值不會改變的常量。
transient:可選,用於指定該成員變量爲暫時性變量,用於對象存盤。
volatile:可選,用於指定該成員變量爲共享變量,用於併發線程的共享。
變量類型:必選參數,用於指定變量的數據類型,其值爲Java中的任意一種數據類型。
變量名:必選參數,用於指定成員變量的名稱,變量名必須是合法的Java標識符。
在前面聲明的Fruit類中聲明3個成員變量。

public class Fruit {
    public String color="";      //定義顏色成員變量
    //定義種植成員方法
    public void plant(){
        System.out.println("果樹正在種植……");
    }
    //定義生長的成員方法
    public void grow(){
        System.out.println("果樹正在生長……");
    }
    //定義收穫的成員方法
    public void harvest(){
        System.out.println("水果已經收穫……");
    }
}

public class Fruit {
    public String color;               `        //聲明公共變量color
    public static String flavor;            //聲明靜態變量flavor
    public final boolean STATE=true;        //聲明常量STATE並賦值
}

2.聲明局部變量
定義局部變量的基本語法格式同定義成員變量類似,所不同的是不能使用public、protected、private和static關鍵字對局部變量進行修飾,但可以使用final關鍵字,語法格式如下:
[final] <變量類型> <變量名>;
參數說明:
final:可選,用於指定該局部變量爲常量。
變量類型:必選參數,用於指定變量的數據類型,其值爲Java中的任意一種數據類型。
變量名:必選參數,用於指定局部變量的名稱,變量名必須是合法的Java標識符。
在成員方法grow()中聲明兩個局部變量。


public void grow(){
    final boolean STATE;    //聲明常量STATE
    int age;                    //聲明局部變量age
    // …
  }

三 構造方法的概念及用途

在類中除了成員方法之外,還存在一種特殊類型的方法,那就是構造方法。構造方法是一個與類同名的方法,對象的創建就是通過構造方法完成的。每當類實例化一個對象時,都會自動調用構造方法。

構造方法的特點如下:
構造方法沒有返回值。
構造方法的名稱要與本類的名稱相同。
注意:
在定義構造方法時,構造方法沒有返回值,但這與普通沒有返回值的方法不同,普通沒有返回值的方法使用public void methodEx()這種形式進行定義,但構造方法並不需要void關鍵字進行修飾。
構造方法的語法定義格式如下:


public book(){
    //...構造方法體
}

參數說明:
public:構造方法修飾符。
book:構造方法的名稱。
在構造方法中可以爲成員變量賦值,這樣當實例化一個本類的對象時,相應的成員變量也將被初始化。
如果在類中沒有明確定義構造方法,則編譯器會自動創建一個不帶參數的默認構造方法。
注意:
如果在類中定義的構造方法都不是無參的構造方法,則編譯器不會爲類設置一個默認的無參構造方法,當試圖調用無參構造方法實例化一個對象時,編譯器會報錯。所以,只有在類中沒有定義任何構造方法時,編譯器纔會在該類中自動創建一個不帶參數的構造方法。

使用this關鍵字可以調用類的成員變量和成員方法,同時,使用this也可以調用類中的構造方法。
在項目中創建AnyThting類,在該類中分別定義一個沒有參數的構造方法和一個包含有String類型參數的構造方法。

public class AnyThting {
    public AnyThting(){                 //定義無參構造方法
        this("this調用有參構造方法");               //使用this調用有參構造方法
        System.out.println("無參構造方法");
    }
    public AnyThting(String name){              //定義有參構造方法
        System.out.println("有參構造方法");
    }
}
從例6.4中可以看到定義的兩個構造方法,在無參構造方法中可以使用this關鍵字調用有參的構造方法,但使用這種方式應當注意的是,只可以在無參構造方法中的第一句使用this調用有參構造方法。

在Java中,創建對象包括聲明對象和爲對象分配內存兩部分,下面分別進行介紹。
1.聲明對象
對象是類的實例,屬於某個已經聲明的類,因此,在對對象進行聲明之前,一定要先定義該對象的類。聲明對象的一般格式如下:
類名 對象名;
參數說明:
類名:必選,用於指定一個已經定義的類。
對象名:必選,用於指定對象名稱,對象名必須是合法的Java標識符。
例如,聲明Fruit類的一個對象fruit的代碼如下:
Fruit fruit;
在聲明對象時,只是在內存中爲其建立了一個引用並置初值爲null,表示不指向任何內存空間,因此,還需要爲對象分配內存。

2.爲對象分配內存
爲對象分配內存也稱爲實例化對象。在Java中使用關鍵字new來實例化對象,具體語法格式如下:
對象名=new 構造方法名([參數列表]);
參數說明:
對象名:必選,用於指定已經聲明的對象名。
類名:必選,用於指定構造方法名(即類名)因爲構造方法與類名相同。
參數列表:可選參數,用於爲指定構造方法提供入口參數,如果構造方法無參數,則可以省略。
例如,在聲明Fruit類的一個對象fruit後,可以通過以下代碼爲對象fruit分配內存:
fruit=new Fruit();
在上面的代碼中,由於Fruit類的構造方法無入口參數,所以省略了參數列表。
在聲明對象時,也可以直接爲其分配內存,例如,上面的聲明對象和爲對象分配內存的功能也可以通過以下代碼實現:
Fruit fruit=new Fruit();

四 使用對象

創建對象後,就可以通過對象來引用其成員變量,並改變成員變量的值了,同時,也可以通過對象來調用其成員方法。通過使用運算符“.”實現對成員變量的訪問和成員方法的調用。下面通過具體的實例來介紹如何訪問成員變量和調用成員方法。
【例6.2】 本實例主要實現定義一個類並創建該類的對象的操作,同時通過創建的對象改變成員變量的值和調用該類中的成員方法。

1)創建一個名稱爲Circ的類,在該類中定義一個常量PI、一個成員變量r、一個不帶參數的方法getArea()和一個帶參數的方法getCircumference()。

public class Circ {
    final float PI=3.14159f;                //定義一個用於表示圓周率的常量PI
    public float r=0.0f;
    //定義計算圓面積的方法
    public float getArea() {
        float area=PI*r*r;                  //計算圓面積並賦值給變量area
        return area;                        //返回計算後的圓面積 
//定義計算圓周長的方法
    public float getCircumference(float r) {
        float circumference=2*PI*r;         //計算圓周長並賦值給變量circumference
//定義主方法測試程序
    public static void main(String[] args) {
        Circ circ=new Circ();
        circ.r=20;                          //改變成員變量的值
        float r=20;
        float area=circ.getArea();          //調用成員方法
        System.out.println("圓的面積爲:"+area);        
        float circumference=circ.getCircumference(r);   //調用帶參數的成員方法
        System.out.println("圓的周長爲:"+circumference);
    }

2)運行本實例,其運行結果如圖所示。
這裏寫圖片描述

  圖  實例的運行結果

五 銷燬對象

在許多程序設計語言中,需要手動釋放對象所佔用的內存,但是,在Java中就不需要手動完成這項工作。Java提供的垃圾回收機制可以自動判斷對象是否還在使用,並能夠自動銷燬不再使用的對象,收回對象所佔用的資源。
Java提供了一個名爲finalize()的方法,用於在對象被垃圾回收機制銷燬之前,由垃圾回收系統調用。但是垃圾回收系統的運行是不可預測的,因此,在Java程序中,也可以使用析構方法finalize()隨時來銷燬一個對象。析構方法finalize()沒有任何參數和返回值,每個類有且只有一個析構方法。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章