大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 Java學(xué)習(xí) Java中的構(gòu)造方法詳解

Java中的構(gòu)造方法詳解

更新時間:2022-12-09 11:53:42 來源:動力節(jié)點 瀏覽1956次

Java構(gòu)造函數(shù)是在實例化對象時調(diào)用的特殊方法。換句話說,當(dāng)您使用new關(guān)鍵字時。Java 構(gòu)造函數(shù)的目的是在使用之前初始化新創(chuàng)建的對象。本 Java 構(gòu)造函數(shù)教程將更詳細(xì)地探討 Java 構(gòu)造函數(shù)。

這是一個創(chuàng)建對象的簡單示例,它會調(diào)用類構(gòu)造函數(shù):

MyClass myClassObj = new MyClass();

此示例導(dǎo)致MyClass創(chuàng)建一個新對象,并調(diào)用 的無參數(shù)構(gòu)造函數(shù) MyClass。稍后您將了解什么是無參數(shù)構(gòu)造函數(shù)。

Java 類構(gòu)造函數(shù)初始化該類的實例(對象)。通常,構(gòu)造函數(shù)會初始化需要初始化的對象的字段。Java 構(gòu)造函數(shù)也可以帶參數(shù),因此可以在創(chuàng)建時在對象中初始化字段。

在 Java 中定義構(gòu)造函數(shù)

這是一個簡單的 Java 構(gòu)造函數(shù)聲明示例。該示例顯示了一個非常簡單的 Java 類,它只有一個構(gòu)造函數(shù)。

公開課 MyClass {
    公共 MyClass() {
    }
}

構(gòu)造函數(shù)是這部分:

    公共 MyClass() {
    }

Java 構(gòu)造函數(shù)聲明的第一部分是訪問修飾符。訪問修飾符與方法和字段具有相同的含義。它們確定哪些類可以訪問(調(diào)用)構(gòu)造函數(shù)。

Java 構(gòu)造函數(shù)聲明的第二部分是構(gòu)造函數(shù)所屬類的名稱。使用構(gòu)造函數(shù)的類名向 Java 編譯器發(fā)出這是一個構(gòu)造函數(shù)的信號。還要注意構(gòu)造函數(shù)沒有返回類型,就像其他方法一樣。

Java 構(gòu)造函數(shù)聲明的第三部分是構(gòu)造函數(shù)可以采用的參數(shù)列表。構(gòu)造函數(shù)參數(shù)在構(gòu)造函數(shù)()的類名部分之后的括號內(nèi)聲明。在上面的構(gòu)造函數(shù)聲明示例中,沒有聲明任何參數(shù)。我將在本文后面展示一個帶有參數(shù)的 Java 構(gòu)造函數(shù)聲明示例。

Java 構(gòu)造函數(shù)聲明的第四部分是構(gòu)造函數(shù)的主體。{ }構(gòu)造函數(shù)的主體定義在參數(shù)列表之后的大括號內(nèi)。在上面的構(gòu)造函數(shù)示例中,構(gòu)造函數(shù)在構(gòu)造函數(shù)體內(nèi)沒有任何操作。它被稱為“空”構(gòu)造函數(shù)。

構(gòu)造函數(shù)重載 - 一個 Java 類的多個構(gòu)造函數(shù)

一個類可以有多個構(gòu)造函數(shù),只要它們的簽名(它們采用的參數(shù))不相同即可。您可以根據(jù)需要定義任意數(shù)量的構(gòu)造函數(shù)。當(dāng)一個 Java 類包含多個構(gòu)造函數(shù)時,我們說構(gòu)造函數(shù)被重載(有多個版本)。這就是 構(gòu)造函數(shù)重載的意思,一個 Java 類包含多個構(gòu)造函數(shù)。

這是一個 Java 構(gòu)造函數(shù)重載示例:

公開課 MyClass {
    私人整數(shù) = 0;
    公共 MyClass() {
    }
    公共 MyClass(int theNumber) {
        this.number = theNumber;
    }
}

上面的 Java 類包含兩個構(gòu)造函數(shù)。第一個構(gòu)造函數(shù)是一個無參數(shù)構(gòu)造函數(shù),這意味著它沒有參數(shù)(沒有參數(shù))。第二個構(gòu)造函數(shù)接受一個int參數(shù)。在構(gòu)造函數(shù)體內(nèi),int參數(shù)值被分配給一個字段,這意味著參數(shù)的值被復(fù)制到該字段中。該字段因此被初始化為給定的參數(shù)值。

this字段名前面的 關(guān)鍵字( this.number)不是必須的。它只是向編譯器發(fā)出信號,表明它是number被引用的命名字段。這在有關(guān)構(gòu)造函數(shù)參數(shù)的部分中有更詳細(xì)的解釋。

默認(rèn),無參數(shù)構(gòu)造函數(shù)

您不必為類定義構(gòu)造函數(shù),但如果您沒有定義任何構(gòu)造函數(shù),Java 編譯器將為您插入一個默認(rèn)的無參數(shù)構(gòu)造函數(shù)。因此,一旦類被編譯,它總是至少有一個無參數(shù)的構(gòu)造函數(shù)。

如果您確實為您的類定義了構(gòu)造函數(shù),那么 Java 編譯器不會將默認(rèn)的無參數(shù)構(gòu)造函數(shù)插入到您的類中。

構(gòu)造函數(shù)參數(shù)

正如您已經(jīng)看到的,Java 構(gòu)造函數(shù)可以采用參數(shù)。然后可以使用這些參數(shù)來初始化新創(chuàng)建對象的內(nèi)部狀態(tài)(字段)。這是一個例子:

公共課員工{
    私有字符串 firstName = null;
    私有字符串 lastName = null;
    私人詮釋出生年 = 0;
    公共員工(首先是字符串,
        字符串最后,
        整數(shù)年){
        名字 = 第一個;
        姓氏 = 姓氏;
        出生年份 = 年;
    }
}

在此示例中,Java 構(gòu)造函數(shù)聲明以粗體標(biāo)記。如您所見,聲明了三個參數(shù):first,last和year。在構(gòu)造函數(shù)的主體中,這三個參數(shù)的值被分配給Employee 對象的字段。

每個參數(shù)后的換行符是可選的。Java 編譯器忽略此處的換行符。如果需要,您也可以將參數(shù)聲明寫在一行中,如下所示:

public Employee(String first, String last, int year) {
    名字 = 第一個;
    姓氏 = 姓氏;
    出生年份 = 年;
}

要調(diào)用這個采用三個參數(shù)的構(gòu)造函數(shù),您可以Employee像這樣實例化一個對象:

雇員 employee = new Employee("Jack", "Daniels", 2000);

參數(shù)在等號右側(cè)的類名之后的括號內(nèi)傳遞給構(gòu)造函數(shù)。然后創(chuàng)建對象,并執(zhí)行構(gòu)造函數(shù)。執(zhí)行上述構(gòu)造函數(shù)后,構(gòu)造函數(shù)初始化的字段將具有傳遞給構(gòu)造函數(shù)的參數(shù)值。

Java 構(gòu)造函數(shù)參數(shù)可以與字段同名。如果構(gòu)造函數(shù)參數(shù)與字段同名,則 Java 編譯器無法知道您指的是哪個。默認(rèn)情況下,如果參數(shù)(或局部變量)與同一類中的字段同名,則參數(shù)(或局部變量)為該字段“隱藏”。看看這個構(gòu)造函數(shù)示例:

公共課員工{
    私有字符串 firstName = null;
    私有字符串 lastName = null;
    私人詮釋出生年 = 0;
    公共雇員(字符串名字,
        字符串姓氏,
        整數(shù)出生年){
        名字 = 名字;
        姓氏 = 姓氏;
        出生年 = 出生年;
    }   
}

在 Employee 類的構(gòu)造函數(shù)中,firstName,lastName和birthYear 標(biāo)識符現(xiàn)在引用構(gòu)造函數(shù)參數(shù),而不是同名的 Employee 字段。因此,構(gòu)造函數(shù)現(xiàn)在只需將參數(shù)設(shè)置為等于它們自己。Employee 字段永遠(yuǎn)不會被初始化。

要向 Java 編譯器表明您指的是 Employee 類的字段而不是參數(shù),請 this在字段名稱前放置關(guān)鍵字和一個點。以下是之前的 Java 構(gòu)造函數(shù)聲明在更改后的樣子:

公共課員工{
    私有字符串 firstName = null;
    私有字符串 lastName = null;
    私人詮釋出生年 = 0;
    公共雇員(字符串名字,
        字符串姓氏,
        整數(shù)出生年){
        this.firstName = firstName;
        this.lastName = lastName;
        this.birthYear = birthYear;
    }    
}

現(xiàn)在,Employee 字段已在構(gòu)造函數(shù)中正確初始化。

調(diào)用構(gòu)造函數(shù)

在創(chuàng)建包含構(gòu)造函數(shù)的類的新實例時調(diào)用構(gòu)造函數(shù)。這是一個 Java 構(gòu)造函數(shù)調(diào)用示例:

MyClass myClassVar = new MyClass();

MyClass此示例調(diào)用(調(diào)用)本文前面定義 的無參數(shù)構(gòu)造函數(shù)。

如果你想將參數(shù)傳遞給構(gòu)造函數(shù),你可以在類名后的括號中包含參數(shù),如下所示:

MyClass myClassVar = new MyClass(1975);

此示例將一個參數(shù)傳遞給采用as 參數(shù) 的MyClass構(gòu)造函數(shù)。int

從構(gòu)造函數(shù)調(diào)用構(gòu)造函數(shù)

在 Java 中,可以從另一個構(gòu)造函數(shù)內(nèi)部調(diào)用一個構(gòu)造函數(shù)。當(dāng)您從另一個構(gòu)造函數(shù)內(nèi)部調(diào)用一個構(gòu)造函數(shù)時,您可以使用this關(guān)鍵字來引用該構(gòu)造函數(shù)。下面是在 Java 中從另一個構(gòu)造函數(shù)中調(diào)用一個構(gòu)造函數(shù)的示例:

公共課員工{
    私有字符串 firstName = null;
    私有字符串 lastName = null;
    私人詮釋出生年 = 0;
    公共員工(首先是字符串,
        字符串最后,
        整數(shù)年){
        名字 = 第一個;
        姓氏 = 姓氏;
        出生年份 = 年;
    }
    公共員工(首先是字符串,最后是字符串){
        這個(第一個,最后一個,-1);
    }
}

注意第二個構(gòu)造函數(shù)定義。在構(gòu)造函數(shù)的主體中,您可以找到以下 Java 語句:

這個(第一個,最后一個,-1);

this關(guān)鍵字后跟圓括號和參數(shù)表示正在調(diào)用同一個 Java 類中的另一個構(gòu)造函數(shù) 。調(diào)用哪個其他構(gòu)造函數(shù)取決于您傳遞給構(gòu)造函數(shù)調(diào)用的參數(shù)(在this關(guān)鍵字后的括號內(nèi))。在此示例中,它是被調(diào)用的類中的第一個構(gòu)造函數(shù)。

在超類中調(diào)用構(gòu)造函數(shù)

在 Java 中,一個類可以擴(kuò)展另一個類。當(dāng)一個類擴(kuò)展另一個類時,它也被稱為從它擴(kuò)展的類“繼承”。擴(kuò)展的類稱為子類,被擴(kuò)展的類稱為超類。在我的關(guān)于Java 中的繼承的教程中更詳細(xì)地介紹了繼承。

擴(kuò)展另一個類的類不繼承其構(gòu)造函數(shù)。但是,子類必須在其子類構(gòu)造函數(shù)內(nèi)部調(diào)用超類中的構(gòu)造函數(shù)!如果子類在其自身內(nèi)部調(diào)用另一個構(gòu)造函數(shù),則被調(diào)用的構(gòu)造函數(shù)必須調(diào)用超類構(gòu)造函數(shù)。

查看以下兩個 Java 類。Car 類擴(kuò)展(繼承自)Vehicle 類。

公共類車輛{
    私有字符串 regNo = null;
    公共車輛(字符串編號){
        this.regNo = 否;
    }
}
公共類汽車擴(kuò)展車輛{
    私人字符串品牌=空;
    public Car(String br, String no) {
        超級(沒有);
        這個品牌 = br;
    }
}

注意 Car 類中的構(gòu)造函數(shù)。它使用此 Java 語句調(diào)用超類中的構(gòu)造函數(shù):

超級(沒有);

使用關(guān)鍵字super是指使用關(guān)鍵字的類的超類super。當(dāng)super關(guān)鍵字后跟括號時,就像這里一樣,它指的是超類中的構(gòu)造函數(shù)。在這種情況下,它指的是 Vehicle 類中的構(gòu)造函數(shù)。因為 Car 擴(kuò)展了 Vehicle,所以 Car 的構(gòu)造函數(shù)必須都調(diào)用 Vehicle 中的構(gòu)造函數(shù)。

Java 構(gòu)造函數(shù)訪問修飾符

構(gòu)造函數(shù)的訪問修飾符決定了應(yīng)用程序中哪些類可以調(diào)用該構(gòu)造函數(shù)。訪問修飾符在有關(guān)Java 訪問修飾符的文本中有更詳細(xì)的解釋 。

例如,如果聲明了構(gòu)造函數(shù),protected則只有同一包中的類或該類的子類才能調(diào)用該構(gòu)造函數(shù)。

一個類可以有多個構(gòu)造函數(shù),每個構(gòu)造函數(shù)可以有自己的訪問修飾符。因此,某些構(gòu)造函數(shù)可能對應(yīng)用程序中的所有類都可用,而其他構(gòu)造函數(shù)僅對同一包中的類、子類可用,甚至僅對類本身可用(私有構(gòu)造函數(shù))。

從構(gòu)造函數(shù)中拋出異常

可以從 Java 構(gòu)造函數(shù)中拋出異常。下面是一個帶有可以拋出異常的構(gòu)造函數(shù)的 Java 類的示例:

公共汽車類 {
    公共汽車(字符串品牌)拋出異常{
        如果(品牌==空){
            throw new Exception("品牌參數(shù)不能為空!");
        }
    }
}

注意throws Exception構(gòu)造函數(shù)聲明的部分。該部分聲明構(gòu)造函數(shù)可能會拋出一個Exception. 如果發(fā)生這種情況,則創(chuàng)建的Car實例無效。

下面是調(diào)用Car構(gòu)造函數(shù)的示例:

車車=空;
嘗試{
    car = new Car("梅賽德斯");
    //對汽車對象做點什么
} 趕上(異常 e){
    // 處理異常
}

Car如果構(gòu)造函數(shù)拋出異常,car則永遠(yuǎn)不會為該變量分配對Car您嘗試創(chuàng)建的對象的引用。該car變量仍將指向 null。

如果要防止在無效狀態(tài)下創(chuàng)建給定類的對象,讓構(gòu)造函數(shù)拋出異常是個好主意。通常是構(gòu)造函數(shù)的輸入?yún)?shù)可能導(dǎo)致對象無效。如果構(gòu)造函數(shù)檢測到無效的輸入?yún)?shù),它會拋出異常并阻止將對象賦值給任何變量。

提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 深夜免费看片 | 日本最新免费二区三区 | 一区二区三区网站在线免费线观看 | 日本高清视频一区二区三区 | 日本在线观看一级高清片 | www国产精品com | 又爽又黄又无遮挡的视频在线观看 | 美女女女女女女bbbbbb毛片 | 国产精品久久久久久久久久一区 | 四虎影视永久地址www成人污 | 毛片久久久| 亚欧精品一区二区三区 | 国产福利午夜波多野结衣 | 亚洲精品中文字幕不卡在线 | 四虎影视紧急入口地址大全 | 狠狠色噜噜 | 日韩精品一区二三区中文 | 久久久社区 | 日韩第3页 | www.黄| 久久国产成人精品国产成人亚洲 | 国产成人一区二区视频在线观看 | 日韩毛片在线观看 | 深夜在线网址 | 国产第一页福利 | 视频在线a| 99j久久精品久久久久久 | 国内精品久久久久影院亚洲 | 九月婷婷综合 | 91尤物在线播放 | 人人夜 | 国内精品久久久久久久 | 末成年娇小性色xxxxx视频 | 免费看成人毛片日本久久 | 亚洲国产欧美在线观看 | 亚洲一区在线视频 | 美女福利在线观看 | 手机在线看福利 | 亚洲综合成人在线 | 久久一本精品 | 久久这里精品青草免费 |