Java非靜態(tài)成員變量之死循環(huán)(詳解)
1.非靜態(tài)成員變量
當(dāng)成員變量為非靜態(tài)成員變量且對當(dāng)前類進行實例化時,將會產(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() 會對ConstrutorCls進行實例 化,后然對這個類的成員obj進行初始化,obj又是對自已所在類進行實列化,這一樣一直下去,直到StackOverflowError
2.靜態(tài)成員變量
靜態(tài)成員變量是屬于類的,不會出現(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()時,首先將ConstructorCls加截到JVM中,在加載時對該類的靜態(tài)成員進行初始化(僅加載時初始化一次),初始化obj對像,new 一個ConstructorCls, 這里的一個關(guān)鍵點 是這個靜態(tài)成員是屬于類的,并不屬于某一個實例對像,所以不會產(chǎn)生死循環(huán)。
以上就是小編為大家?guī)淼腏ava非靜態(tài)成員變量之死循環(huán)(詳解)的全部內(nèi)容了,希望大家喜歡哦~
如果大家想了解更多游戲活動與游戲攻略,請持續(xù)關(guān)注本站,本站小編將在第一時間為大家?guī)碜詈每础⒆詈猛妗⒆钚迈r的游戲資訊。更多精彩內(nèi)容,盡在jb51游戲頻道!
相關(guān)文章
SpringBoot數(shù)據(jù)層測試事務(wù)回滾的實現(xiàn)流程
這篇文章主要介紹了SpringBoot數(shù)據(jù)層測試事務(wù)回滾的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-10-10
如何通過Java監(jiān)聽MySQL數(shù)據(jù)的變化
對于二次開發(fā)來說,很大一部分就找找文件和找數(shù)據(jù)庫的變化情況,下面這篇文章主要給大家介紹了關(guān)于如何通過Java監(jiān)聽MySQL數(shù)據(jù)的變化的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-03-03
mybatis-plus 關(guān)于savebatch,saveorupdatebatch遇到的坑及解決辦法
本文主要介紹了mybatis-plus 關(guān)于savebatch,saveorupdatebatch遇到的坑及解決辦法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01

