我最近遇到過這種類型的代碼。爲什麼這個Singleton模式不會導致StackOverflowError?
package com.singleton;
public class Singleton {
private static Singleton singleton = new Singleton();
private Singleton() {
}
public static Singleton getInstance() {
return singleton;
}
public static void main(String[] args) {
Singleton obj = Singleton.getInstance();
System.out.println("Done creating Singleton");
}
}
現在,這個問題可能乍看起來並不明顯。 ATLEAST不給我:對
因此,添加此功能使不夠清晰
public void print() {
System.out.println("Printing inside Singleton Variable");
singleton.print();
}
public static void main(String[] args) {
Singleton obj = Singleton.getInstance();
obj.print();
System.out.println("Done creating Singleton");
}
現在的問題,正在運行的程序會導致成StackOVerflowError
我的問題是,目前已是另一種這裏面一個對象代碼中的模式。所以爲什麼它在第一種情況下沒有導致StackOverflowError(即在添加打印功能並在主類中調用它之前)。
在代碼第二部分中,你遞歸調用'print'方法。你還期望什麼?在代碼的第一部分中,您不會遞歸地調用任何方法。 –
爲什麼你認爲第一個代碼片段會導致堆棧溢出? –
僅僅因爲你從'的getInstance返回'singleton'()'不會造成任何遞歸調用。如果你會返回'singleton.GetInstance()',那麼你也會有溢出。 –