软件编程
位置:首页>> 软件编程>> java编程>> Java非静态成员变量之死循环(详解)

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

作者:bateman6988  发布时间:2022-04-15 09:18:20 

标签:java,非静态成员变量,死循环

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, 这里的一个关键点 是这个静态成员是属于类的,并不属于某一个实例对像,所以不会产生死循环。

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

来源:http://www.cnblogs.com/bateman6988/archive/2017/09/21/7571589.html

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com