Java非靜態(tài)成員變量之死循環(huán)(詳解)
1.非靜態(tài)成員變量
當(dāng)成員變量為非靜態(tài)成員變量且對(duì)當(dāng)前類進(jìn)行實(shí)例化時(shí),將會(huì)產(chǎn)生死循環(huán)
例子:
public class ConstructorCls {
private ConstructorCls obj=new ConstructorCls();
}
public class TestC {
public static void main(String[] args) {
ConstructorCls c =new ConstructorCls();
}
}
結(jié)果:
Exception in thread "main" java.lang.StackOverflowError at com.ConstructorCls.<init>(ConstructorCls.java:7) at com.ConstructorCls.<init>(ConstructorCls.java:7) at com.ConstructorCls.<init>(ConstructorCls.java:7)
分析:當(dāng)new ConstrutorCls() 會(huì)對(duì)ConstrutorCls進(jìn)行實(shí)例 化,后然對(duì)這個(gè)類的成員obj進(jìn)行初始化,obj又是對(duì)自已所在類進(jìn)行實(shí)列化,這一樣一直下去,直到StackOverflowError
2.靜態(tài)成員變量
靜態(tài)成員變量是屬于類的,不會(huì)出現(xiàn)死循環(huán)
例如:
public class ConstructorCls {
private static ConstructorCls obj=new ConstructorCls();
}
public class TestC {
public static void main(String[] args) {
ConstructorCls c =new ConstructorCls();
}
}
分析:當(dāng)new ConstructorCls()時(shí),首先將ConstructorCls加截到JVM中,在加載時(shí)對(duì)該類的靜態(tài)成員進(jìn)行初始化(僅加載時(shí)初始化一次),初始化obj對(duì)像,new 一個(gè)ConstructorCls, 這里的一個(gè)關(guān)鍵點(diǎn) 是這個(gè)靜態(tài)成員是屬于類的,并不屬于某一個(gè)實(shí)例對(duì)像,所以不會(huì)產(chǎn)生死循環(huán)。
以上就是小編為大家?guī)?lái)的Java非靜態(tài)成員變量之死循環(huán)(詳解)的全部?jī)?nèi)容了,希望大家喜歡哦~
如果大家想了解更多游戲活動(dòng)與游戲攻略,請(qǐng)持續(xù)關(guān)注本站,本站小編將在第一時(shí)間為大家?guī)?lái)最好看、最好玩、最新鮮的游戲資訊。更多精彩內(nèi)容,盡在jb51游戲頻道!
相關(guān)文章
SpringBoot數(shù)據(jù)層測(cè)試事務(wù)回滾的實(shí)現(xiàn)流程
這篇文章主要介紹了SpringBoot數(shù)據(jù)層測(cè)試事務(wù)回滾的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-10-10
java 替換docx文件中的字符串方法實(shí)現(xiàn)
這篇文章主要介紹了java 替換docx文件中的字符串方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
springboot驗(yàn)證碼的生成與驗(yàn)證的兩種方法
本文主要介紹了springboot驗(yàn)證碼的生成與驗(yàn)證的兩種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
如何通過(guò)Java監(jiān)聽MySQL數(shù)據(jù)的變化
對(duì)于二次開發(fā)來(lái)說(shuō),很大一部分就找找文件和找數(shù)據(jù)庫(kù)的變化情況,下面這篇文章主要給大家介紹了關(guān)于如何通過(guò)Java監(jiān)聽MySQL數(shù)據(jù)的變化的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03
Java連接MYSQL數(shù)據(jù)庫(kù)的詳細(xì)步驟
這篇文章主要為大家介紹了Java連接MYSQL數(shù)據(jù)庫(kù)的詳細(xì)步驟,感興趣的小伙伴們可以參考一下2016-05-05
JAVA正則表達(dá)式過(guò)濾文件的實(shí)現(xiàn)方法
這篇文章主要介紹了JAVA正則表達(dá)式過(guò)濾文件的實(shí)現(xiàn)方法的相關(guān)資料,希望通過(guò)本文大家能夠掌握理解這部分內(nèi)容,需要的朋友可以參考下2017-09-09
Java對(duì)象創(chuàng)建的幾種方式總結(jié)
本文詳細(xì)介紹了Java中創(chuàng)建對(duì)象的五種方法,包括使用new關(guān)鍵字、Class的newInstance()方法、Constructor的newInstance()方法、克隆以及反序列化,同時(shí)討論了這些方式是否調(diào)用了構(gòu)造器以及創(chuàng)建對(duì)象的條件,文章還提供了示例代碼進(jìn)行演示,需要的朋友可以參考下2025-02-02
mybatis-plus 關(guān)于savebatch,saveorupdatebatch遇到的坑及解決辦法
本文主要介紹了mybatis-plus 關(guān)于savebatch,saveorupdatebatch遇到的坑及解決辦法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01

