1.非靜態(tài)成員變量
成都創(chuàng)新互聯(lián)專注于永城企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站設(shè)計(jì),商城系統(tǒng)網(wǎng)站開發(fā)。永城網(wǎng)站建設(shè)公司,為永城等地區(qū)提供建站服務(wù)。全流程按需策劃,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
當(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.(ConstructorCls.java:7) at com.ConstructorCls. (ConstructorCls.java:7) at com.ConstructorCls. (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ī)淼腏ava非靜態(tài)成員變量之死循環(huán)(詳解)的全部內(nèi)容了,希望大家喜歡哦~
如果大家想了解更多游戲活動(dòng)與游戲攻略,請(qǐng)持續(xù)關(guān)注本站,本站小編將在第一時(shí)間為大家?guī)碜詈每?、最好玩、最新鮮的游戲資訊。更多精彩內(nèi)容,盡在jb51游戲頻道!