下面小编就为大家带来一篇
java
非静态成员变量之死循环(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
1.非静态成员变量
当成员变量为非静态成员变量且对当前类进行实例化时,将会产生死循环
例子:
结果:
立即学习
“
Java免费学习笔记(深入)
”;
分析:
当new ConstrutorCls() 会对ConstrutorCls进行实例 化,后然对这个类的成员obj进行初始化,obj又是对自已所在类进行实列化,这一样一直下去,直到StackOverflowError
Eclipse导入Android或其他的JAVA项目的正确方法 WORD版
本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
下载
2.静态成员变量
静态成员变量是属于类的,不会出现死循环
例如:
分析:
当new ConstructorCls()时,首先将ConstructorCls加截到JVM中,在加载时对该类的静态成员进行初始化(仅加载时初始化一次),初始化obj对像,new 一个ConstructorCls, 这里的一个关键点 是这个静态成员是属于类的,并不属于某一个实例对像,所以不会产生死循环。
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.(ConstructorCls.java:7)
at com.ConstructorCls.(ConstructorCls.java:7)
at com.ConstructorCls.(ConstructorCls.java:7) public class ConstructorCls {
private static ConstructorCls obj=new ConstructorCls();
}public class TestC {
public static void main(String[] args) {
ConstructorCls c =new ConstructorCls();
}
}