更新時間:2022-12-09 11:53:42 來源:動力節點 瀏覽1684次
Java構造函數是在實例化對象時調用的特殊方法。換句話說,當您使用new關鍵字時。Java 構造函數的目的是在使用之前初始化新創建的對象。本 Java 構造函數教程將更詳細地探討 Java 構造函數。
這是一個創建對象的簡單示例,它會調用類構造函數:
MyClass myClassObj = new MyClass();
此示例導致MyClass創建一個新對象,并調用 的無參數構造函數 MyClass。稍后您將了解什么是無參數構造函數。
Java 類構造函數初始化該類的實例(對象)。通常,構造函數會初始化需要初始化的對象的字段。Java 構造函數也可以帶參數,因此可以在創建時在對象中初始化字段。
這是一個簡單的 Java 構造函數聲明示例。該示例顯示了一個非常簡單的 Java 類,它只有一個構造函數。
公開課 MyClass {
公共 MyClass() {
}
}
構造函數是這部分:
公共 MyClass() {
}
Java 構造函數聲明的第一部分是訪問修飾符。訪問修飾符與方法和字段具有相同的含義。它們確定哪些類可以訪問(調用)構造函數。
Java 構造函數聲明的第二部分是構造函數所屬類的名稱。使用構造函數的類名向 Java 編譯器發出這是一個構造函數的信號。還要注意構造函數沒有返回類型,就像其他方法一樣。
Java 構造函數聲明的第三部分是構造函數可以采用的參數列表。構造函數參數在構造函數()的類名部分之后的括號內聲明。在上面的構造函數聲明示例中,沒有聲明任何參數。我將在本文后面展示一個帶有參數的 Java 構造函數聲明示例。
Java 構造函數聲明的第四部分是構造函數的主體。{ }構造函數的主體定義在參數列表之后的大括號內。在上面的構造函數示例中,構造函數在構造函數體內沒有任何操作。它被稱為“空”構造函數。
一個類可以有多個構造函數,只要它們的簽名(它們采用的參數)不相同即可。您可以根據需要定義任意數量的構造函數。當一個 Java 類包含多個構造函數時,我們說構造函數被重載(有多個版本)。這就是 構造函數重載的意思,一個 Java 類包含多個構造函數。
這是一個 Java 構造函數重載示例:
公開課 MyClass {
私人整數 = 0;
公共 MyClass() {
}
公共 MyClass(int theNumber) {
this.number = theNumber;
}
}
上面的 Java 類包含兩個構造函數。第一個構造函數是一個無參數構造函數,這意味著它沒有參數(沒有參數)。第二個構造函數接受一個int參數。在構造函數體內,int參數值被分配給一個字段,這意味著參數的值被復制到該字段中。該字段因此被初始化為給定的參數值。
this字段名前面的 關鍵字( this.number)不是必須的。它只是向編譯器發出信號,表明它是number被引用的命名字段。這在有關構造函數參數的部分中有更詳細的解釋。
您不必為類定義構造函數,但如果您沒有定義任何構造函數,Java 編譯器將為您插入一個默認的無參數構造函數。因此,一旦類被編譯,它總是至少有一個無參數的構造函數。
如果您確實為您的類定義了構造函數,那么 Java 編譯器不會將默認的無參數構造函數插入到您的類中。
正如您已經看到的,Java 構造函數可以采用參數。然后可以使用這些參數來初始化新創建對象的內部狀態(字段)。這是一個例子:
公共課員工{
私有字符串 firstName = null;
私有字符串 lastName = null;
私人詮釋出生年 = 0;
公共員工(首先是字符串,
字符串最后,
整數年){
名字 = 第一個;
姓氏 = 姓氏;
出生年份 = 年;
}
}
在此示例中,Java 構造函數聲明以粗體標記。如您所見,聲明了三個參數:first,last和year。在構造函數的主體中,這三個參數的值被分配給Employee 對象的字段。
每個參數后的換行符是可選的。Java 編譯器忽略此處的換行符。如果需要,您也可以將參數聲明寫在一行中,如下所示:
public Employee(String first, String last, int year) {
名字 = 第一個;
姓氏 = 姓氏;
出生年份 = 年;
}
要調用這個采用三個參數的構造函數,您可以Employee像這樣實例化一個對象:
雇員 employee = new Employee("Jack", "Daniels", 2000);
參數在等號右側的類名之后的括號內傳遞給構造函數。然后創建對象,并執行構造函數。執行上述構造函數后,構造函數初始化的字段將具有傳遞給構造函數的參數值。
Java 構造函數參數可以與字段同名。如果構造函數參數與字段同名,則 Java 編譯器無法知道您指的是哪個。默認情況下,如果參數(或局部變量)與同一類中的字段同名,則參數(或局部變量)為該字段“隱藏”。看看這個構造函數示例:
公共課員工{
私有字符串 firstName = null;
私有字符串 lastName = null;
私人詮釋出生年 = 0;
公共雇員(字符串名字,
字符串姓氏,
整數出生年){
名字 = 名字;
姓氏 = 姓氏;
出生年 = 出生年;
}
}
在 Employee 類的構造函數中,firstName,lastName和birthYear 標識符現在引用構造函數參數,而不是同名的 Employee 字段。因此,構造函數現在只需將參數設置為等于它們自己。Employee 字段永遠不會被初始化。
要向 Java 編譯器表明您指的是 Employee 類的字段而不是參數,請 this在字段名稱前放置關鍵字和一個點。以下是之前的 Java 構造函數聲明在更改后的樣子:
公共課員工{
私有字符串 firstName = null;
私有字符串 lastName = null;
私人詮釋出生年 = 0;
公共雇員(字符串名字,
字符串姓氏,
整數出生年){
this.firstName = firstName;
this.lastName = lastName;
this.birthYear = birthYear;
}
}
現在,Employee 字段已在構造函數中正確初始化。
在創建包含構造函數的類的新實例時調用構造函數。這是一個 Java 構造函數調用示例:
MyClass myClassVar = new MyClass();
MyClass此示例調用(調用)本文前面定義 的無參數構造函數。
如果你想將參數傳遞給構造函數,你可以在類名后的括號中包含參數,如下所示:
MyClass myClassVar = new MyClass(1975);
此示例將一個參數傳遞給采用as 參數 的MyClass構造函數。int
在 Java 中,可以從另一個構造函數內部調用一個構造函數。當您從另一個構造函數內部調用一個構造函數時,您可以使用this關鍵字來引用該構造函數。下面是在 Java 中從另一個構造函數中調用一個構造函數的示例:
公共課員工{
私有字符串 firstName = null;
私有字符串 lastName = null;
私人詮釋出生年 = 0;
公共員工(首先是字符串,
字符串最后,
整數年){
名字 = 第一個;
姓氏 = 姓氏;
出生年份 = 年;
}
公共員工(首先是字符串,最后是字符串){
這個(第一個,最后一個,-1);
}
}
注意第二個構造函數定義。在構造函數的主體中,您可以找到以下 Java 語句:
這個(第一個,最后一個,-1);
this關鍵字后跟圓括號和參數表示正在調用同一個 Java 類中的另一個構造函數 。調用哪個其他構造函數取決于您傳遞給構造函數調用的參數(在this關鍵字后的括號內)。在此示例中,它是被調用的類中的第一個構造函數。
在 Java 中,一個類可以擴展另一個類。當一個類擴展另一個類時,它也被稱為從它擴展的類“繼承”。擴展的類稱為子類,被擴展的類稱為超類。在我的關于Java 中的繼承的教程中更詳細地介紹了繼承。
擴展另一個類的類不繼承其構造函數。但是,子類必須在其子類構造函數內部調用超類中的構造函數!如果子類在其自身內部調用另一個構造函數,則被調用的構造函數必須調用超類構造函數。
查看以下兩個 Java 類。Car 類擴展(繼承自)Vehicle 類。
公共類車輛{
私有字符串 regNo = null;
公共車輛(字符串編號){
this.regNo = 否;
}
}
公共類汽車擴展車輛{
私人字符串品牌=空;
public Car(String br, String no) {
超級(沒有);
這個品牌 = br;
}
}
注意 Car 類中的構造函數。它使用此 Java 語句調用超類中的構造函數:
超級(沒有);
使用關鍵字super是指使用關鍵字的類的超類super。當super關鍵字后跟括號時,就像這里一樣,它指的是超類中的構造函數。在這種情況下,它指的是 Vehicle 類中的構造函數。因為 Car 擴展了 Vehicle,所以 Car 的構造函數必須都調用 Vehicle 中的構造函數。
構造函數的訪問修飾符決定了應用程序中哪些類可以調用該構造函數。訪問修飾符在有關Java 訪問修飾符的文本中有更詳細的解釋 。
例如,如果聲明了構造函數,protected則只有同一包中的類或該類的子類才能調用該構造函數。
一個類可以有多個構造函數,每個構造函數可以有自己的訪問修飾符。因此,某些構造函數可能對應用程序中的所有類都可用,而其他構造函數僅對同一包中的類、子類可用,甚至僅對類本身可用(私有構造函數)。
可以從 Java 構造函數中拋出異常。下面是一個帶有可以拋出異常的構造函數的 Java 類的示例:
公共汽車類 {
公共汽車(字符串品牌)拋出異常{
如果(品牌==空){
throw new Exception("品牌參數不能為空!");
}
}
}
注意throws Exception構造函數聲明的部分。該部分聲明構造函數可能會拋出一個Exception. 如果發生這種情況,則創建的Car實例無效。
下面是調用Car構造函數的示例:
車車=空;
嘗試{
car = new Car("梅賽德斯");
//對汽車對象做點什么
} 趕上(異常 e){
// 處理異常
}
Car如果構造函數拋出異常,car則永遠不會為該變量分配對Car您嘗試創建的對象的引用。該car變量仍將指向 null。
如果要防止在無效狀態下創建給定類的對象,讓構造函數拋出異常是個好主意。通常是構造函數的輸入參數可能導致對象無效。如果構造函數檢測到無效的輸入參數,它會拋出異常并阻止將對象賦值給任何變量。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習