Java非静态成员变量之死循环(详解)

2025-05-29 0 74

1.非静态成员变量

当成员变量为非静态成员变量且对当前类进行实例化时,将会产生死循环

例子:

?

1

2

3
public class ConstructorCls {

private ConstructorCls obj=new ConstructorCls();

}

?

1

2

3

4

5

6
public class TestC {

public static void main(String[] args) {

ConstructorCls c =new ConstructorCls();

}

}

结果:

?

1

2

3

4
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.静态成员变量

静态成员变量是属于类的,不会出现死循环

例如:

?

1

2

3
public class ConstructorCls {

private static ConstructorCls obj=new ConstructorCls();

}

?

1

2

3

4

5

6
public class TestC {

public static void main(String[] args) {

ConstructorCls c =new ConstructorCls();

}

}

分析:当new ConstructorCls()时,首先将ConstructorCls加截到JVM中,在加载时对该类的静态成员进行初始化(仅加载时初始化一次),初始化obj对像,new 一个ConstructorCls, 这里的一个关键点 是这个静态成员是属于类的,并不属于某一个实例对像,所以不会产生死循环

以上就是小编为大家带来的Java非静态成员变量死循环(详解)的全部内容了,希望大家喜欢哦~

原文链接:http://www.cnblogs.com/bateman6988/archive/2017/09/21/7571589.html

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Java非静态成员变量之死循环(详解) https://www.kuaiidc.com/115016.html

相关文章

发表评论
暂无评论