首页 > 开发 > Java > 正文

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

2024-07-13 10:11:18
字体:
来源:转载
供稿:网友

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.StackOverflowErrorat 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非静态成员变量之死循环(详解)的全部内容了,希望大家喜欢哦~

如果大家想了解更多游戏活动与游戏攻略,请持续关注本站,本站小编将在第一时间为大家带来最好看、最好玩、最新鲜的游戏资讯。更多精彩内容,尽在vevb游戏频道!


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表