当前位置: 代码迷 >> J2SE >> Java 类中成员变量的有关问题
  详细解决方案

Java 类中成员变量的有关问题

热度:112   发布时间:2016-04-23 19:40:36.0
Java 类中成员变量的问题
如果类中定义一个类型为该类的非静态成员变量,声明时初始化,就会出现栈溢出异常;
然而如果是静态的,为啥就不会出现栈溢出异常了呢?

比如:
public class Test {
//public Test test = new Test();       //出现栈溢出异常
        public static Test test = new Test();    //不出现异常

public static void main(String[] args) {
Test test = new Test();

}
}


希望能从内存分配方面给出答案,谢谢。
------解决思路----------------------
直接在类成员后边用=初始化的代码会在构造类实例的时候被调用,每当执行new Test()的时候,中间有一句代码也是new Test(),然后再调用……最后形成没有临界条件的递归就栈溢出了
static成员是脱离于类实例的,在new Test()时不会执行=后边的语句
------解决思路----------------------
静态的成员变量是属于类的,它是跟类的字节码文件即.class文件一起加载的。而Test test = new Test(); ,这个变量是属于对象的,也就是说每次创建对象都会创建一个这样的变量。那么你会发现,如此就成了无限循环。一直往栈里压,无数层,等到内存满了就会报内存溢出了。
  相关解决方案