public class Pclass
{
Pclass objClass = new Pclass()
public void method()
{
objClass.xxxxx();
}
public void method1()
{
objClass.xxxx();
}
}
这样编译没有问题啊!但是执行的时候总是不行啊!
难道不能所有的方法都使用第三行的对象吗?
...全文
28731打赏收藏
一个基础的问题啊!但是想不明白阿
public class Pclass { Pclass objClass = new Pclass() public void method() { objClass.xxxxx(); } public void method1() { objClass.xxxx(); } } 这样编译没有问题啊!但是执行的时候总是不行啊! 难道不能所有的方法都使用第三行的对象吗?
这个是明显的死循环!
public class Pclass
{
Pclass objClass = new Pclass();
}
在你第一次new Pclass时候,它首先初始化所有的成员变量,即objClass = new Pclass();
这个时候就会再次调用Pclass的初始化过程,它又发现了objClass = new Pclass();这个时候
它还是再需要再new Pclass();
结果,无限循环,一直处于new Pclass的状态直到堆栈溢出!
所以你写成
public class Pclass
{
static Pclass objClass = new Pclass();
}
就没有问题,因为在第一次加载这个类的时候就开始初始化静态成员变量objClass = new Pclass,
但是在new的过程中是不需要理会静态成员变量的,这样程序才能正常执行