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