日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

显式无参数构造函数与默认构造函数

發(fā)布時(shí)間:2023/12/3 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 显式无参数构造函数与默认构造函数 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

大多數(shù)不熟悉Java的開發(fā)人員在沒有指定至少一個(gè)顯式構(gòu)造函數(shù)的情況下 ,會(huì)很快了解到為其Java類隱式創(chuàng)建了“ 默認(rèn)構(gòu)造函數(shù) ”( 由javac )。 Java語(yǔ)言規(guī)范的 8.8.9節(jié)簡(jiǎn)要指出:“如果一個(gè)類不包含構(gòu)造函數(shù)聲明,則將隱式聲明一個(gè)默認(rèn)構(gòu)造函數(shù)。” 該部分進(jìn)一步描述了隱式創(chuàng)建的默認(rèn)構(gòu)造函數(shù)的特征,包括它不帶參數(shù),不帶throws子句,以及調(diào)用類似地不接受任何參數(shù)的其超類的構(gòu)造器。 Java開發(fā)人員可以選擇顯式實(shí)現(xiàn)類似于默認(rèn)構(gòu)造函數(shù)的無(wú)參數(shù)構(gòu)造函數(shù)(例如,不接受任何參數(shù)且不包含throws子句)。 在本文中,我探討了一些開發(fā)人員可能決定實(shí)現(xiàn)顯式無(wú)參數(shù)構(gòu)造函數(shù)而不是依賴于隱式默認(rèn)構(gòu)造函數(shù)的原因 。

明確指定無(wú)參數(shù)構(gòu)造函數(shù)的一些原因

排除類的實(shí)例化

實(shí)施顯式無(wú)參數(shù)構(gòu)造函數(shù)的常見原因是,避免使用public可訪問性隱式創(chuàng)建默認(rèn)構(gòu)造函數(shù)。 如果類具有其他顯式構(gòu)造函數(shù)(接受參數(shù)),則這是不必要的步驟,因?yàn)槿魏物@式構(gòu)造函數(shù)的存在都會(huì)阻止隱式默認(rèn)構(gòu)造函數(shù)的生成。 但是,如果不存在其他顯式構(gòu)造函數(shù)(例如,在具有所有static方法的“實(shí)用程序”類中),則可以通過實(shí)現(xiàn)具有private訪問權(quán)限的顯式無(wú)參數(shù)構(gòu)造函數(shù)來(lái)排除隱式默認(rèn)構(gòu)造函數(shù)。 Java語(yǔ)言規(guī)范的 8.8.10節(jié)描述了使用所有private顯式構(gòu)造函數(shù)來(lái)防止類的實(shí)例化。

通過Builder或靜態(tài)初始化工廠強(qiáng)制類實(shí)例化

顯式實(shí)現(xiàn)private無(wú)參數(shù)構(gòu)造函數(shù)的另一個(gè)原因是,通過靜態(tài)初始化工廠方法或構(gòu)造器而不是構(gòu)造函數(shù)來(lái)強(qiáng)制實(shí)例化該類的對(duì)象。 Effective Java (第三版)的前兩項(xiàng)概述了使用靜態(tài)初始化工廠方法和生成器比直接使用構(gòu)造器的優(yōu)勢(shì)。

需要多個(gè)構(gòu)造函數(shù),包括無(wú)參數(shù)構(gòu)造函數(shù)

實(shí)現(xiàn)無(wú)參數(shù)構(gòu)造函數(shù)的一個(gè)明顯原因可能是與上面討論的原因一樣普遍或更常見,這是當(dāng)需要無(wú)參數(shù)構(gòu)造函數(shù)時(shí),但需要參數(shù)的構(gòu)造函數(shù)也是如此。 在這種情況下,由于存在其他期望參數(shù)的構(gòu)造函數(shù),因此必須顯式創(chuàng)建無(wú)參數(shù)構(gòu)造函數(shù),因?yàn)橛肋h(yuǎn)不會(huì)為已經(jīng)具有一個(gè)或多個(gè)顯式構(gòu)造函數(shù)的類隱式創(chuàng)建默認(rèn)構(gòu)造函數(shù)。

使用Javadoc構(gòu)建文檔對(duì)象

顯式實(shí)現(xiàn)無(wú)參數(shù)構(gòu)造函數(shù)而不是依賴隱式創(chuàng)建的默認(rèn)構(gòu)造函數(shù)的另一個(gè)原因是在構(gòu)造函數(shù)上表達(dá)Javadoc注釋。 這是JDK-8224174 (“ java.lang.Number具有默認(rèn)構(gòu)造函數(shù)”)的既定理由,該理由現(xiàn)在是JDK 13的一部分,并且也以當(dāng)前未解決的JDK-8071961表示 (“當(dāng)默認(rèn)構(gòu)造函數(shù)為已創(chuàng)建”)。 最近編寫的CSR JDK-8224232 (“ java.lang.Number具有默認(rèn)構(gòu)造函數(shù)”)詳細(xì)說(shuō)明了這一點(diǎn):“默認(rèn)構(gòu)造函數(shù)不適用于有據(jù)可查的API。”

顯性優(yōu)先于隱性優(yōu)先

與隱式創(chuàng)建相比,某些開發(fā)人員通常更喜歡顯式規(guī)范。 在Java中,可以在顯式規(guī)范或隱式對(duì)應(yīng)之間進(jìn)行選擇。 如果開發(fā)人員重視溝通方面或假定顯式構(gòu)造函數(shù)具有更高的可讀性,則他們可能更喜歡顯式無(wú)參數(shù)構(gòu)造函數(shù)而不是隱式構(gòu)造函數(shù)。

在JDK中用顯式無(wú)參數(shù)構(gòu)造函數(shù)替換默認(rèn)構(gòu)造函數(shù)

在JDK中,有些情況下,隱式默認(rèn)構(gòu)造函數(shù)已被顯式無(wú)參數(shù)構(gòu)造函數(shù)代替。 其中包括:

  • JDK 9中已解決的JDK-8071959 (“ java.lang.Object使用隱式默認(rèn)構(gòu)造函數(shù)”)用顯式的無(wú)參數(shù)構(gòu)造函數(shù)代替了java.lang.Object的“默認(rèn)構(gòu)造函數(shù)”。 閱讀該問題的“描述”使我微笑:“在修改java.lang.Object( JDK-8071434 )上的某些文檔時(shí),注意到該類*沒有*具有顯式構(gòu)造函數(shù),而是依靠javac創(chuàng)建隱式默認(rèn)構(gòu)造函數(shù)。 多么尷尬!”
  • JDK 9中已解決的JDK-8177153 (“ LambdaMetafactory具有默認(rèn)構(gòu)造函數(shù)”)用顯式(和private )無(wú)參數(shù)構(gòu)造函數(shù)代替了隱式默認(rèn)構(gòu)造函數(shù)。
  • JDK 13計(jì)劃的JDK-8224174 (“ java.lang.Number具有默認(rèn)構(gòu)造函數(shù)”)將用顯式無(wú)參數(shù)構(gòu)造函數(shù)替換java.lang.Number的隱式默認(rèn)構(gòu)造函數(shù)。

關(guān)于默認(rèn)構(gòu)造函數(shù)的潛在javac lint警告

有一天, javac可能會(huì)收到可用的lint警告,以指出具有默認(rèn)構(gòu)造函數(shù)的類。 JDK-8071961 (“當(dāng)創(chuàng)建默認(rèn)構(gòu)造函數(shù)時(shí)添加javac lint警告”)目前尚不適用于任何特定的JDK版本,它指出:“ JLS第8.8.9節(jié)記錄了,如果一個(gè)類沒有聲明至少一個(gè)構(gòu)造函數(shù),編譯器默認(rèn)會(huì)生成一個(gè)構(gòu)造函數(shù)。 盡管此策略可能很方便,但是對(duì)于正式類,如果沒有其他原因?qū)е履J(rèn)構(gòu)造函數(shù)沒有Javadoc,則這是一種不良的編程習(xí)慣。 使用默認(rèn)構(gòu)造函數(shù)可能是合理的javac lint警告。”

結(jié)論

依賴于在編譯時(shí)創(chuàng)建的默認(rèn)構(gòu)造函數(shù)絕對(duì)很方便,但是在某些情況下,即使不需要顯式指定,顯式指定無(wú)參數(shù)構(gòu)造函數(shù)也可能更為可取。

翻譯自: https://www.javacodegeeks.com/2019/05/explicit-arguments-constructor-versus-default-constructor.html

總結(jié)

以上是生活随笔為你收集整理的显式无参数构造函数与默认构造函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。