java构造器_Java构造器就是这么简单!
前言
理解構(gòu)造器之前,首先我們需要了解Java中為什么要引入構(gòu)造器,以及構(gòu)造器的作用。
在很久之前,程序員們編寫C程序總會忘記初始化變量(這真的是一件瑣碎但必須的事),C++引入了 構(gòu)造器(constructor) 的概念,這是一個在創(chuàng)建對象時被自動調(diào)用的特殊方法。Java也采用了構(gòu)造器。
一、構(gòu)造器的引入
引入構(gòu)造器幫助我們解決了哪些問題呢?假設(shè)我們每定義一個類都必須定義一個initialize()方法,該方法提醒你,每次使用對象之前都要執(zhí)行一次該方法,這意味著用戶每次都必須記得自己去調(diào)用此方法,這和上文提到的C程序員一樣,很容易就忘記了。Java構(gòu)造器的出現(xiàn)很好的規(guī)避掉了這種問題,創(chuàng)建對象時,java會在使用對象之前調(diào)用相應(yīng)的構(gòu)造器,保證對象正確初始化。
我們來看一個簡單實例:
public從這個例子我們看到了,構(gòu)造器為 TestMain() ,創(chuàng)建對象時,會分配內(nèi)存并調(diào)用對應(yīng)的構(gòu)造方法,可以看到輸出結(jié)果為 默認(rèn)構(gòu)造器 ,它已經(jīng)被正確地初始化了。
二、構(gòu)造器命名規(guī)則
從上面那個例子中或許已經(jīng)觀察到了:類名和構(gòu)造器名必須相同,所以”每個方法首字母小寫“的編碼風(fēng)格并不適用于構(gòu)造器。
三、注意事項
- 構(gòu)造器必須與主類同名
- 構(gòu)造器可以有參數(shù)
- 構(gòu)造器可以重載
- 沒有返回值
- 不添加構(gòu)造器編譯器生成默認(rèn)構(gòu)造器
四、默認(rèn)構(gòu)造器
默認(rèn)構(gòu)造器(又名無參構(gòu)造器)是沒有形式參數(shù)的,它創(chuàng)建的是”默認(rèn)對象“。舉個栗子:
publicnew TestMain()創(chuàng)建了一個新對象,并調(diào)用了默認(rèn)構(gòu)造——雖然我們并沒有主動定義它。Java規(guī)定了,如果沒有構(gòu)造會生成默認(rèn)構(gòu)造,如果存在了一個及以上的構(gòu)造便不會自動生成。
publicnew TestMain()編譯器會報錯,因為我們沒有定義對應(yīng)的無參構(gòu)造方法,編譯器無法順利創(chuàng)建對象。如果你沒有定義構(gòu)造器,編譯器會認(rèn)為”你需要一個構(gòu)造器,我?guī)湍阍煲粋€“;如果你自己寫了一個構(gòu)造器,編譯器會認(rèn)為”你已經(jīng)有構(gòu)造器了,你知道自己在做什么,我不幫你生成“。
五、構(gòu)造方法重載
有默認(rèn)無參構(gòu)造,就有帶參構(gòu)造;有帶參構(gòu)造也就會發(fā)生方法重載。為了滿足不同的初始化需求,我們通常會需要定義多個帶參構(gòu)造器,由于都是構(gòu)造器,它們的名稱必須相同,為了讓方法名相同而參數(shù)不同的方法存在,我們就必須使用 方法重載 。它是構(gòu)造器所必須的。
public從上述代碼中我們可以看到,類中定義了三個不同的構(gòu)造方法,main方法中,在括號里傳遞不同的參數(shù),編譯器會根據(jù)參數(shù)的類型尋找對應(yīng)的構(gòu)造方法,從而初始化三個不同的對象,這就是構(gòu)造方法的重載。
涉及基本類型的重載
在使用構(gòu)造方法的重載時,我們經(jīng)常會遇到將基本類型傳遞給重載方法時的一些問題。基本類型可以從一個 較小(窄類型) 類型自動提升(轉(zhuǎn)型)為一個 較大(寬類型) 類型,當(dāng)涉及到方法重載時便會造成一些混淆。舉個栗子:
public首先,我們來看一看t1對象,創(chuàng)建對象時傳遞的參數(shù)是一個float類型的數(shù)據(jù),但是結(jié)果卻顯示調(diào)用了double帶參構(gòu)造,這是咋回事?其實在創(chuàng)建對象時,編譯器會根據(jù)傳遞參數(shù)的類型自動尋找參數(shù)類型對應(yīng)的構(gòu)造方法,如果沒有一模一樣的構(gòu)造方法,就會尋找類型更“寬”的構(gòu)造方法。t1就是典型的例子,double類型比float更“寬”(float占4字節(jié),double占8字節(jié)),所以會把傳遞的參數(shù)提升。
再來看t2對象,這個對象傳遞的是char類型數(shù)據(jù),對于char類型略有不同,如果無法找到恰好接受char參數(shù)的方法,就會把char直接提升為int
更多學(xué)習(xí)內(nèi)容請閱讀我的知乎專欄:
程序員的一切:打造全網(wǎng)Java高級工程師資料庫(總目錄)看完學(xué)的更加快,知識更牢固。你值得擁有(持續(xù)更新)~?zhuanlan.zhihu.com總結(jié)
以上是生活随笔為你收集整理的java构造器_Java构造器就是这么简单!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前程无忧51job怎么上传附件简历
- 下一篇: java api 1.6 下载_Java