黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

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

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

更新時(shí)間:2022-12-09 11:53:42 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1705次

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

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

MyClass myClassObj = new MyClass();

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

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

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

這是一個(gè)簡單的 Java 構(gòu)造函數(shù)聲明示例。該示例顯示了一個(gè)非常簡單的 Java 類,它只有一個(gè)構(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è)構(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ù)。我將在本文后面展示一個(gè)帶有參數(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ù)重載 - 一個(gè) Java 類的多個(gè)構(gòu)造函數(shù)

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

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

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

上面的 Java 類包含兩個(gè)構(gòu)造函數(shù)。第一個(gè)構(gòu)造函數(shù)是一個(gè)無參數(shù)構(gòu)造函數(shù),這意味著它沒有參數(shù)(沒有參數(shù))。第二個(gè)構(gòu)造函數(shù)接受一個(gè)int參數(shù)。在構(gòu)造函數(shù)體內(nèi),int參數(shù)值被分配給一個(gè)字段,這意味著參數(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 編譯器將為您插入一個(gè)默認(rèn)的無參數(shù)構(gòu)造函數(shù)。因此,一旦類被編譯,它總是至少有一個(gè)無參數(shù)的構(gòu)造函數(shù)。

如果您確實(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)(字段)。這是一個(gè)例子:

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

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

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

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

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

雇員 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 編譯器無法知道您指的是哪個(gè)。默認(rèn)情況下,如果參數(shù)(或局部變量)與同一類中的字段同名,則參數(shù)(或局部變量)為該字段“隱藏”。看看這個(gè)構(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)鍵字和一個(gè)點(diǎ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ù)的類的新實(shí)例時(shí)調(diào)用構(gòu)造函數(shù)。這是一個(gè) 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);

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

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

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

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

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

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

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

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

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

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

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

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

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

超級(沒有);

使用關(guān)鍵字super是指使用關(guān)鍵字的類的超類super。當(dāng)super關(guān)鍵字后跟括號時(shí),就像這里一樣,它指的是超類中的構(gòu)造函數(shù)。在這種情況下,它指的是 Vehicle 類中的構(gòu)造函數(shù)。因?yàn)?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è)類可以有多個(gè)構(gòu)造函數(shù),每個(gè)構(gòu)造函數(shù)可以有自己的訪問修飾符。因此,某些構(gòu)造函數(shù)可能對應(yīng)用程序中的所有類都可用,而其他構(gòu)造函數(shù)僅對同一包中的類、子類可用,甚至僅對類本身可用(私有構(gòu)造函數(shù))。

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

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

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

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

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

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

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

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

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

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 456亚洲人成高清在线 | 欧美精品xxxtv | 欧美理论影院在线观看免费 | 亚洲国产综合精品中文字幕 | 欧美日韩一区二区亚洲 | 在线播放国产不卡免费视频 | 婷婷亚洲图片 | 亚洲日韩在线视频 | 亚洲a成人7777777久久 | 国产高清专区 | 波多野结衣在线视频免费观看 | 黄色一级一毛片 | 亚洲日本在线观看网址 | 蝌蚪网在线观看 | 亚洲无线码1区 | 91精品人成在线观看 | 黄 色 片 在 线 看 | 成人黄色在线 | 中文字幕成人在线观看 | 欧美成人观看免费版 | 国产成人综合亚洲一区 | 欧美在线视频一区二区三区 | 国产精品天干天干在线综合 | 欧美黑人性猛交╳xx╳动态图 | 9191亚洲高清国产 | 春菜花在线中文字幕hd | 国美女福利视频午夜精品 | 在线观看国产一区亚洲bd | 国产伦久视频免费观看视频 | 免费成人福利视频 | 日本精品久久久免费高清 | aaa级黄| 日韩免费毛片 | 在线观看色视频网站 | 天天色天天拍 | 看一级毛片免费观看视频 | 国产 字幕 制服 中文 在线 | 黄视频免费| 中文字幕欧美日韩 | 亚洲深夜福利视频 | 伊人日日夜夜 |