标题: 求解 [打印本页] 作者: 范泰洋 时间: 2012-7-14 15:31 标题: 求解 class Demo
{
Demo d = new Demo()
Demo()
{
System.out.println("demo run");
}
}
class DemoDemo
{
public static void main(String[] args)
{
new Demo();
}
}作者: 张_涛 时间: 2012-7-14 15:47
程序运行的时候会产生一个栈溢出的异常,如下:
Exception in thread "main" java.lang.StackOverflowError
你在main()方法中创建一个Demo对象,而Demo对象在初始化成员变量的时候,又要去创建一个Demo对象,从而产生死循环,导致栈溢出。
联想到单例模式,可以发现,当成员变量是自身对象的时候,通常不初始化,只是一个定义,而在方法中对其进行赋值,这样就不会产生溢出了,具体如下:
class Demo
{
Demo d;
Demo()
{
System.out.println("demo run");
}
public void setDemo() {
d = new Demo();
}
}作者: 苑占丽 时间: 2012-7-14 15:58
你这个程序会报出这样的错误:
Exception in thread "main" java.lang.StackOverflowError的错误
意思就是
是栈溢出的错误。进入了死循环。是在程序里多写了Demo d =new Demo(),此处的Demo是没有被实际使用到的类。
请注意!当类DemoDemo中使用了Demo d = new Demo();的时候。因为在类Demo的方法外有个Demo d = new Demo();。所以出现了栈溢出。这样写是没有意义的,因为又不是单例模式,也不需要在本类中自己创建对象,况且即使是单例模式也不是这种写法作者: 黑马刘涛 时间: 2012-7-14 16:34 本帖最后由 黑马刘涛 于 2012-7-14 16:37 编辑
/**
* 能应对大多数情况的单例实现
*/
public class SingletonKerrigan implements Serializable {
private static class SingletonHolder {
/**
* 单例对象实例
*/
static final SingletonKerrigan INSTANCE = new SingletonKerrigan();