在本文中,我們將討論構(gòu)造函數(shù),如何創(chuàng)建我們自己的構(gòu)造函數(shù),以及Java中的默認(rèn)構(gòu)造函數(shù)。
什么是構(gòu)造函數(shù)?
作為基于類的面向?qū)ο缶幊绦g(shù)語(yǔ),構(gòu)造函數(shù)是用于初始化新創(chuàng)建的對(duì)象(類)的唯一方法。創(chuàng)建構(gòu)造函數(shù)時(shí)必須遵循一些規(guī)則。這些規(guī)則包括:
構(gòu)造函數(shù)的名稱必須與類名相同。
構(gòu)造函數(shù)必須沒(méi)有返回類型。
在繼續(xù)之前,讓我們看看類在Java中的樣子:
上面的代碼顯示了一個(gè)名為 Student 的類,該類具有三個(gè)屬性 – 、 和 。我們將假設(shè)該類應(yīng)該是注冊(cè)學(xué)生的樣本?;叵胍幌拢@三個(gè)屬性沒(méi)有任何值,因此沒(méi)有一個(gè)信息是硬編碼的。firstNamelastNameage
現(xiàn)在,我們將使用構(gòu)造函數(shù)來(lái)創(chuàng)建對(duì)象的新實(shí)例。那是:Student
我們創(chuàng)建了一個(gè)構(gòu)造函數(shù),用于初始化對(duì)象中定義的屬性。上面的代碼是無(wú)參數(shù)構(gòu)造函數(shù)的示例。現(xiàn)在讓我們看一個(gè)不同的例子:Student
現(xiàn)在我們已經(jīng)創(chuàng)建了一個(gè)參數(shù)化構(gòu)造函數(shù)。參數(shù)化構(gòu)造函數(shù)是使用參數(shù)/參數(shù)創(chuàng)建的構(gòu)造函數(shù)。讓我們來(lái)分解一下。
我們創(chuàng)建了一個(gè)新的構(gòu)造函數(shù),它接受三個(gè)參數(shù) - 兩個(gè)字符串和一個(gè)整數(shù)。
然后,我們將這些參數(shù)鏈接到我們?cè)趧?chuàng)建類時(shí)定義的屬性?,F(xiàn)在,我們已經(jīng)使用構(gòu)造函數(shù)初始化了 Student 對(duì)象。
最后,我們創(chuàng)建了 Student 對(duì)象的新實(shí)例,并傳入了我們的參數(shù)。我們能夠傳入這些參數(shù),因?yàn)槲覀円呀?jīng)在構(gòu)造函數(shù)中定義了它們。
我創(chuàng)建了一個(gè)包含三個(gè)參數(shù)的構(gòu)造函數(shù),但您也可以創(chuàng)建單獨(dú)的構(gòu)造函數(shù)來(lái)初始化每個(gè)屬性。
現(xiàn)在您已經(jīng)了解了 Java 中的構(gòu)造函數(shù)是什么以及如何使用它,現(xiàn)在讓我們來(lái)看看默認(rèn)構(gòu)造函數(shù)。
什么是默認(rèn)構(gòu)造函數(shù)?
默認(rèn)構(gòu)造函數(shù)是由編譯器創(chuàng)建的構(gòu)造函數(shù),如果我們不為類定義任何構(gòu)造函數(shù)。下面是一個(gè)示例:
您能發(fā)現(xiàn)這與前面的兩個(gè)示例之間的區(qū)別嗎?請(qǐng)注意,在創(chuàng)建之前,我們沒(méi)有定義任何構(gòu)造函數(shù)來(lái)初始化在類中創(chuàng)建的屬性。myStudent
這不會(huì)以我們的方式拋出錯(cuò)誤。相反,編譯器將創(chuàng)建一個(gè)空構(gòu)造函數(shù),但您不會(huì)在代碼中的任何位置看到此構(gòu)造函數(shù) - 這發(fā)生在引擎蓋下。
當(dāng)編譯器開(kāi)始執(zhí)行其工作時(shí),上面的代碼將如下所示:
很多人混淆了無(wú)參數(shù)構(gòu)造函數(shù)的默認(rèn)構(gòu)造函數(shù),但它們?cè)贘ava中并不相同。程序員創(chuàng)建的任何構(gòu)造函數(shù)在 Java 中都不被視為默認(rèn)構(gòu)造函數(shù)。
在本文中,我們了解了什么是構(gòu)造函數(shù),以及如何創(chuàng)建和使用它們來(lái)初始化我們的對(duì)象。
我們還討論了默認(rèn)構(gòu)造函數(shù)以及它們與無(wú)參數(shù)構(gòu)造函數(shù)的不同之處。