" />

最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JAVA構(gòu)造器是否為靜態(tài)方法你知道嗎

 更新時(shí)間:2022年02月08日 09:57:47   作者:向上攀爬的程序員  
這篇文章主要為大家詳細(xì)介紹了JAVA構(gòu)造器是否為靜態(tài)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助

在thinking in java中,第96頁(yè)提到,“即使沒(méi)有顯示地使用static關(guān)鍵字,構(gòu)造器實(shí)際上也是靜態(tài)方法“,對(duì)此我產(chǎn)生了疑惑,于是找相關(guān)資料進(jìn)行確認(rèn),在一篇大神的博客中得到了答案,那就是構(gòu)造器不是靜態(tài)方法。

主要是以下幾點(diǎn)原因:

Java虛擬機(jī)規(guī)范第二版中定義了四種不同的字節(jié)碼指令來(lái)處理Java程序中不同種類的方法的調(diào)用:

  • invokestatic - 用于調(diào)用類(靜態(tài))方法 
  • invokespecial - 用于調(diào)用實(shí)例方法,特化于super方法調(diào)用、private方法調(diào)用與構(gòu)造器調(diào)用 
  • invokevirtual - 用于調(diào)用一般實(shí)例方法(包括聲明為final但不為private的實(shí)例方法) 
  • invokeinterface - 用于調(diào)用接口方法 

其中,invokestatic與invokespecial調(diào)用的目標(biāo)必然是可以靜態(tài)綁定的(比如不被繼承),因?yàn)樗鼈兌紵o(wú)法參與子類型多態(tài);invokevirtual與invokeinterface的則一般需要做運(yùn)行時(shí)綁定,JVM實(shí)現(xiàn)可以有選擇的根據(jù)final或?qū)嶋H運(yùn)行時(shí)類層次或類型反饋等信息試圖進(jìn)行靜態(tài)綁定。

那么Java中的實(shí)例構(gòu)造器是不是“靜態(tài)方法”呢?從Java語(yǔ)言規(guī)范中給出的“靜態(tài)方法”的定義來(lái)看,答案是“否”——首先從Java語(yǔ)言規(guī)范對(duì)“方法”的定義來(lái)說(shuō),構(gòu)造器根本不是“方法”;其次,實(shí)例構(gòu)造器有一個(gè)隱式參數(shù),“this”,在實(shí)例構(gòu)造器中可以訪問(wèn)“this”,可以通過(guò)“this”訪問(wèn)到正在初始化的對(duì)象實(shí)例的所有實(shí)例成員。 

實(shí)例構(gòu)造器無(wú)法被隱藏或覆寫(xiě),不參與多態(tài),因而可以做靜態(tài)綁定。從這個(gè)意義上可以認(rèn)為實(shí)例構(gòu)造器是“靜態(tài)”的,但這種用法與Java語(yǔ)言定義的“靜態(tài)方法”是兩碼事。 

另外需要注意的是,Java語(yǔ)言中,實(shí)例構(gòu)造器只能在new表達(dá)式(或別的構(gòu)造器)中被調(diào)用,不能通過(guò)方法調(diào)用表達(dá)式來(lái)調(diào)用。new表達(dá)式作為一個(gè)整體保證了對(duì)象的創(chuàng)建與初始化是打包在一起進(jìn)行的,不能分開(kāi)進(jìn)行;但實(shí)例構(gòu)造器只負(fù)責(zé)對(duì)象初始化的部分,“創(chuàng)建對(duì)象”的部分是由new表達(dá)式本身保證的。 

這個(gè)例子的注意點(diǎn)在于: 

1、Java的實(shí)例構(gòu)造器只負(fù)責(zé)初始化,不負(fù)責(zé)創(chuàng)建對(duì)象;Java虛擬機(jī)的字節(jié)碼指令的設(shè)計(jì)也反映了這一點(diǎn),有一個(gè)new指令專門(mén)用于創(chuàng)建對(duì)象實(shí)例,而調(diào)用實(shí)例構(gòu)造器則使用invokespecial指令。 

2、“this”是作為實(shí)例構(gòu)造器的第一個(gè)實(shí)際參數(shù)傳入的。 

靜態(tài)方法中不能使用this,而構(gòu)造器中可以使用this關(guān)鍵字。this是指調(diào)用當(dāng)前方法的對(duì)象,而靜態(tài)方法不屬于任何對(duì)象。

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!     

相關(guān)文章

  • Java結(jié)合Swing實(shí)現(xiàn)龍年祝福語(yǔ)生成工具

    Java結(jié)合Swing實(shí)現(xiàn)龍年祝福語(yǔ)生成工具

    Swing是一個(gè)為Java設(shè)計(jì)的GUI工具包,屬于Java基礎(chǔ)類的一部分,本文將使用Java和Swing實(shí)現(xiàn)龍年祝福語(yǔ)生成工具,感興趣的小伙伴可以了解下
    2024-01-01
  • Java排序算法之選擇排序代碼實(shí)例

    Java排序算法之選擇排序代碼實(shí)例

    這篇文章主要介紹了Java排序算法之選擇排序代碼實(shí)例,從數(shù)組的第一個(gè)元素開(kāi)始,每次遍歷數(shù)組找出一個(gè)最小值放在最左側(cè),第二次從第二個(gè)元素開(kāi)始,依次類推,直到起始元素為數(shù)組的倒數(shù)第二個(gè)元素時(shí),直接和最后一個(gè)元素比較,較小值放左邊,完成排序,需要的朋友可以參考下
    2023-11-11
  • SpringCloudAlibaba整合Feign實(shí)現(xiàn)遠(yuǎn)程HTTP調(diào)用的簡(jiǎn)單示例

    SpringCloudAlibaba整合Feign實(shí)現(xiàn)遠(yuǎn)程HTTP調(diào)用的簡(jiǎn)單示例

    這篇文章主要介紹了SpringCloudAlibaba 整合 Feign 實(shí)現(xiàn)遠(yuǎn)程 HTTP 調(diào)用,文章中使用的是OpenFeign,是Spring社區(qū)開(kāi)發(fā)的組件,需要的朋友可以參考下
    2021-09-09
  • Spring事務(wù)失效的8大原因詳解

    Spring事務(wù)失效的8大原因詳解

    這篇文章主要介紹了Spring事務(wù)失效的8大原因詳解,這里以 MySQL 為例,其 MyISAM 引擎是不支持事務(wù)操作的,InnoDB 才是支持事務(wù)的引擎,一般要支持事務(wù)都會(huì)使用 InnoDB,需要的朋友可以參考下
    2023-09-09
  • Spring Boot事務(wù)配置操作

    Spring Boot事務(wù)配置操作

    這篇文章主要介紹了Spring Boot事務(wù)配置操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • java通過(guò)ip獲取客戶端Mac地址的小例子

    java通過(guò)ip獲取客戶端Mac地址的小例子

    java通過(guò)ip獲取客戶端Mac地址的小例子,需要的朋友可以參考一下
    2013-03-03
  • Java設(shè)計(jì)模式之策略模式定義與用法詳解

    Java設(shè)計(jì)模式之策略模式定義與用法詳解

    這篇文章主要介紹了Java設(shè)計(jì)模式之策略模式定義與用法,結(jié)合具體實(shí)例形式詳細(xì)分析了Java策略模式的概念、原理、定義及相關(guān)操作技巧,需要的朋友可以參考下
    2018-02-02
  • 深入了解Java中的過(guò)濾器Filter和監(jiān)聽(tīng)器Listener

    深入了解Java中的過(guò)濾器Filter和監(jiān)聽(tīng)器Listener

    這篇文章主要為大家詳細(xì)介紹了Java中的過(guò)濾器Filter和監(jiān)聽(tīng)器Listener的使用以及二者的區(qū)別,文中的示例代碼講解詳細(xì),需要的可以參考一下
    2022-06-06
  • 使用Spring?Cloud?Stream處理事件的示例詳解

    使用Spring?Cloud?Stream處理事件的示例詳解

    Spring?Cloud?Stream?是基于?Spring?Boot?的用于構(gòu)建消息驅(qū)動(dòng)微服務(wù)的框架,本文主要介紹了如何使用?Spring?Cloud?Stream?來(lái)處理事件,需要的可以參考一下
    2023-06-06
  • 如何理解Java線程池及其使用方法

    如何理解Java線程池及其使用方法

    線程池是首先創(chuàng)建一些線程,它們的集合稱為線程池。使用線程池可以提高性能,它在系統(tǒng)啟動(dòng)時(shí)創(chuàng)建大量空閑的線程,程序?qū)⒁粋€(gè)任務(wù)傳給線程池,它就會(huì)啟動(dòng)一條線程來(lái)執(zhí)行這個(gè)任務(wù),執(zhí)行結(jié)束以后,該線程并不會(huì)死亡,而是再次返回線程池中成為空閑狀態(tài),等待執(zhí)行下一個(gè)任務(wù)
    2021-06-06

最新評(píng)論

桐乡市| 西乌珠穆沁旗| 宜良县| 榆林市| 富顺县| 崇明县| 体育| 金乡县| 武清区| 肥城市| 定陶县| 林芝县| 浑源县| 五河县| 德兴市| 阳东县| 普定县| 新乐市| 龙陵县| 岳普湖县| 泰州市| 平邑县| 庆云县| 辉南县| 宜丰县| 梁山县| 东丰县| 克拉玛依市| 英德市| 天镇县| 龙岩市| 茌平县| 华亭县| 贵南县| 红河县| 寿光市| 鄂伦春自治旗| 阿尔山市| 铜陵市| 芦山县| 石狮市|