溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java非靜態(tài)成員變量之死循環(huán)(詳解)

發(fā)布時間:2020-09-02 13:15:02 來源:腳本之家 閱讀:140 作者:bateman6988 欄目:編程語言

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ī)碜詈每?、最好玩、最新鮮的游戲資訊。更多精彩內(nèi)容,盡在jb51游戲頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI