您好,登錄后才能下訂單哦!
1.非靜態成員變量
當成員變量為非靜態成員變量且對當前類進行實例化時,將會產生死循環
例子:
public class ConstructorCls { private ConstructorCls obj=new ConstructorCls(); }
public class TestC { public static void main(String[] args) { ConstructorCls c =new ConstructorCls(); } }
結果:
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)
分析:當new ConstrutorCls() 會對ConstrutorCls進行實例 化,后然對這個類的成員obj進行初始化,obj又是對自已所在類進行實列化,這一樣一直下去,直到StackOverflowError
2.靜態成員變量
靜態成員變量是屬于類的,不會出現死循環
例如:
public class ConstructorCls { private static ConstructorCls obj=new ConstructorCls(); }
public class TestC { public static void main(String[] args) { ConstructorCls c =new ConstructorCls(); } }
分析:當new ConstructorCls()時,首先將ConstructorCls加截到JVM中,在加載時對該類的靜態成員進行初始化(僅加載時初始化一次),初始化obj對像,new 一個ConstructorCls, 這里的一個關鍵點 是這個靜態成員是屬于類的,并不屬于某一個實例對像,所以不會產生死循環。
以上就是小編為大家帶來的Java非靜態成員變量之死循環(詳解)的全部內容了,希望大家喜歡哦~
如果大家想了解更多游戲活動與游戲攻略,請持續關注本站,本站小編將在第一時間為大家帶來最好看、最好玩、最新鮮的游戲資訊。更多精彩內容,盡在jb51游戲頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。