但是Singleton模式中岂不是可以Singleton.getInstance().getInstance()......一直调用下去? public class Singleton { private Singleton(){} private static Singleton instance = new Singleton();
public static Singleton getInstance() { return instance; } }
TO sinperwolf() : 呵呵,确实可以这样调用下去,但是这不是递归啊。不管你调用多少次,都是得到唯一的实例。
java.lang.StackOverflowError
{
test = new Test();
}递归调用啊,怎么没有一个跳出条件呢?
public class Test{ public static Test test; 这样应该可以了吧? public Test()
{
test = new Test();
}}
这和你静态不静态没有关系的。你的构造函数jvm实际上是这么执行的:
<<
public Test();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: new #2; //class Test
7: dup
8: invokespecial #3; //Method "<init>":()V
11: putstatic #4; //Field test:LTest;
14: return
>>
递归之行发生在这里:
<< 8: invokespecial #3; //Method "<init>":()V >>
和是否静态还是非静态没有一点关系。你的问题是今天看到最有意思的问题了,呵呵。
public class Singleton { private Singleton(){} private static Singleton instance = new Singleton();
public static Singleton getInstance() {
return instance;
}
}
呵呵,确实可以这样调用下去,但是这不是递归啊。不管你调用多少次,都是得到唯一的实例。