C語言中文網 目錄

Java構造方法

構造方法是類的一種特殊方法,用來初始化類的一個新的對象。Java 中的每個類都有一個默認的構造方法,它必須具有和類名相同的名稱,而且沒有返回類型。構造方法的默認返回類型就是對象類型本身,并且構造方法不能被 static、final、synchronized、abstract 和 native 修飾。

提示:構造方法用于初始化一個新對象,所以用 static 修飾沒有意義;構造方法不能被子類繼承,所以用 final 和 abstract 修飾沒有意義;多個線程不會同時創建內存地址相同的同一個對象,所以用 synchronized 修飾沒有必要。

構造方法的語法格式如下:
class class_name
{
    public class_name(){}    //默認無參構造方法
    public ciass_name([paramList]){}    //定義構造方法
    …
    //類主體
}

在一個類中,與類名相同的方法就是構造方法。每個類可以具有多個構造方法,但要求它們各自包含不同的方法參數。

例 1

構造方法主要有無參構造方法和有參構造方法兩種,示例如下:
public class MyClass
{
    private int m;    //定義私有變量
    MyClass()
    {
        //定義無參的構造方法
        m=0;
    }
    MyCiass(int m)
    {
        //定義有參的構造方法
        this.m=m;
    }
}

該示例定義了兩個構造方法,分別是無參構造方法有參構造方法。在一個類中定義多個具有不同參數的同名方法,這就是方法的重載。這兩個構造方法的名稱都與類名相同,均為 MyClass。在實例化該類時可以調用不同的構造方法進行初始化。

注意:類的構造方法不是要求必須定義的。如果在類中沒有定義任何一個構造方法,則 Java 會自動為該類生成一個默認的構造方法。默認的構造方法不包含任何參數,并且方法體為空。如果類中顯式地定義了一個或多個構造方法,則 Java 不再提供默認構造方法。

例 2

要在不同的條件下使用不同的初始化行為創建類的對象,這時候就需要在一個類中創建多個構造方法。下面通過一個示例來演示構造方法的使用。

(1) 首先在員工類 Worker 中定義兩個構造方法,代碼如下:
public class Worker
{
    public String name;    //姓名
    private int age;    //年齡
    //定義帶有一個參數的構造方法
    public Worker(String name)
    {
        this.name=name;
    }
    //定義帶有兩個參數的構造方法
    public Worker(String name,int age)
    {
        this.name=name;
        this.age=age;
    }
    public String toString()
    {
        return"大家好!我是新來的員工,我叫"+name+",今年"+age+"歲。";
    }
}

在 Worker 類中定義了兩個屬性,其中 name 屬性不可改變。分別定義了帶有一個參數和帶有兩個參數的構造方法,并對其屬性進行初始化。最后定義了該類的 toString() 方法,返回一條新進員工的介紹語句。

提示:Object 類具有一個 toString() 方法,該方法是個特殊的方法,創建的每個類都會繼承該方法,它返回一個 String 類型的字符串。如果一個類中定義了該方法,則在調用該類對象時,將會自動調用該類對象的 toString() 方法返回一個字符串,然后使用“System.out.println(對象名)”就可以將返回的字符串內容打印出來。

(2) 在 TestWorker 類中創建 main() 方法作為程序的入口處,在 main() 方法中調用不同的構造方法實例化 Worker 對象,并對該對象中的屬性進行初始化,代碼如下:
public class TestWorker
{
    public static void main(String[] args)
    {
        System.out.println("-----------帶有一個參數的構造方法-----------");
        //調用帶有一個參數的構造方法,Staff類中的sex和age屬性值不變
        Worker worker1=new Worker("張強");
        System.out.println(worker1);
        System.out.println("-----------帶有兩個參數的構造方法------------");
        //調用帶有兩個參數的構造方法,Staff類中的sex屬性值不變
        Worker worker2=new Worker("李麗",25);
        System.out.println(worker2);
    }
}

在上述代碼中,創建了兩個不同的 Worker 對象:一個是姓名為張強的員工對象,一個是姓名為李麗、年齡為 25 的員工對象。對于第一個 Worker 對象 Worker1,并未指定 age 屬性值,因此程序會將其值采用默認值 0。對于第二個 Worker 對象 Worker2,分別對其指定了 name 屬性值和 age 屬性值,因此程序會將傳遞的參數值重新賦值給 Worker 類中的屬性值。

運行 TestWorker 類,輸出的結果如下:
-----------帶有一個參數的構造方法-----------
大家好!我是新來的員工,我叫張強,今年0歲。
-----------帶有兩個參數的構造方法------------
大家好!我是新來的員工,我叫李麗,今年25歲。

通過調用帶參數的構造方法,在創建對象時,一并完成了對象成員的初始化工作,簡化了對象初始化的代碼。

精美而實用的網站,提供C語言、C++、STL、Linux、Shell、Java、Go語言等教程,以及socket、GCC、vi、Swing、設計模式、JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo
极速pk10开户