" />

欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

主要是以下幾點原因:

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

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

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

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

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

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

這個例子的注意點在于: 

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

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

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

總結(jié)

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

相關(guān)文章

  • springMVC獲取請求參數(shù)的幾種方式匯總

    springMVC獲取請求參數(shù)的幾種方式匯總

    在日常使用SpringMVC進行開發(fā)的時候,有可能遇到前端各種類型的請求參數(shù),這里做一次相對全面的總結(jié),下面這篇文章主要給大家介紹了關(guān)于springMVC獲取請求參數(shù)的幾種方式,需要的朋友可以參考下
    2022-04-04
  • Java中Set與List的關(guān)系與區(qū)別介紹

    Java中Set與List的關(guān)系與區(qū)別介紹

    這篇文章主要介紹了Java中Set與List的關(guān)系與區(qū)別介紹,本文總結(jié)它們兩個接口都是繼承自Collection、它們之間的存儲方式不一樣,需要的朋友可以參考下
    2015-03-03
  • 詳解Java如何實現(xiàn)FP-Growth算法

    詳解Java如何實現(xiàn)FP-Growth算法

    學(xué)校里的實驗,要求實現(xiàn)FP-Growth算法.FP-Growth算法比Apriori算法快很多(但是卻比不上時間)在網(wǎng)上搜索后發(fā)現(xiàn)Java實現(xiàn)的FP-Growth算法很少,且大多數(shù)不太能理解):太菜.所以就自己實現(xiàn)了一下.這篇文章重點介紹一下我的Java實現(xiàn) ,需要的朋友可以參考下
    2021-06-06
  • java 發(fā)送http和https請求的實例

    java 發(fā)送http和https請求的實例

    下面小編就為大家分享一篇java 發(fā)送http和https請求的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • Springboot實現(xiàn)自定義錯誤頁面的方法(錯誤處理機制)

    Springboot實現(xiàn)自定義錯誤頁面的方法(錯誤處理機制)

    這篇文章主要介紹了Springboot實現(xiàn)自定義錯誤頁面的方法(錯誤處理機制),本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • Java判斷ip是否為IPV4或IPV6地址的多種方式

    Java判斷ip是否為IPV4或IPV6地址的多種方式

    本文主要介紹了Java判斷ip是否為IPV4或IPV6地址的多種方式,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • spring boot實現(xiàn)圖片上傳和下載功能

    spring boot實現(xiàn)圖片上傳和下載功能

    這篇文章主要為大家詳細介紹了spring boot實現(xiàn)圖片上傳和下載功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • MyBatis sql中test如何判斷Boolean

    MyBatis sql中test如何判斷Boolean

    這篇文章主要介紹了MyBatis sql中test如何判斷Boolean,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java線程的start方法回調(diào)run方法的操作技巧

    Java線程的start方法回調(diào)run方法的操作技巧

    面試過程中經(jīng)常會被面試官問到為什么我們調(diào)用start()方法時會執(zhí)行run()方法,為什么不能直接調(diào)用run()方法,問的一頭霧水,今天小編給大家介紹下Java線程的start方法回調(diào)run方法的操作技巧,需要的朋友參考下吧
    2017-11-11
  • mybatis-plus配置日志兩種實現(xiàn)方式

    mybatis-plus配置日志兩種實現(xiàn)方式

    這篇文章主要給大家介紹了關(guān)于mybatis-plus配置日志兩種實現(xiàn)方式的相關(guān)資料,Mybatis-plus集成了日志框架,可以將程序運行時產(chǎn)生的日志進行記錄,方便開發(fā)人員進行問題排查,需要的朋友可以參考下
    2023-09-09

最新評論