2011-11-09 89 views
3

我可以讓類的靜態字段保持對其自身實例的引用嗎?如果是這樣,它會在沒有其他人保持參考的情況下在jvm中保持活力嗎?靜態實例變量引用類的實例

public class StatTest { 
    private static StatTest statTest; 

    public static StatTest getStatTest() { 
     if (statTest== null) { 
      statTest= new StatTest(); 
      statTest.init(); 
     } 
     return statTest; 
    } 

    private StatTest() { } 
} 
+1

這是一種實現* singleton *模式的方法。請注意,這不是線程安全的(即,如果您從多個線程調用StatTest.getStatTest(),事情可能會中斷)。爲了比較不同的單例實現(包括一些線程安全的實現),請查看http://stackoverflow.com/questions/7121213/singleton-instantiation/7121246#7121246,這是我前一段時間寫的一個答案。 –

+0

謝謝你所有的答案!我現在意識到這是一個非常知名的模式。我從前認出了單身人士的名字,但我從未讀過它。現在可以很容易地找到關於如何進行的信息。非常感謝! – joaerl

回答

7

是的,這是Singleton設計模式的概念!

2

這是一種創建類的單例的方法。

因此,要回答你的問題:

  • 是的,這是可能的
  • getStatTest()方法的所有引用將返回該實例。

當使用這種方法爲一個單,該方法被稱爲大多= getInstance()

1

它會在沒有其他人保留參考的情況下在jvm中活着嗎?

是的,只要類本身沒有資格進行垃圾回收(只有在使用自定義類加載器時纔會發生)。