[英]Java single instance means
“在Java中,Singleton模式將確保在Java中僅創建一個類的實例”。
我在這里無法理解單一實例的意思。
例如 :
A a = new A();
這是什么? 它是對象還是實例? 如果是is實例,是否表示我們不能像下面這樣。
A b = new A()
即另一個實例“ b”
任何圖表示例都會對我有所幫助。
謝謝
在您的示例中, a
是對A
實例的引用,該實例是通過調用new A()
創建的。
您可以很好地做到A b = new A();
,這意味着現在您周圍有兩個A
實例。
對象的含義與實例相同。
a
引用了new A()
創建的新創建的對象。 但是,這與單例模式無關。 總是如此。
在單例模式中,您將找到一種確保new A()
在程序中僅被調用一次的方法。 完成此操作的典型方法是將A
的構造函數設為私有,然后從A
內創建實例(因此,這是唯一允許調用私有構造函數的類)。
public class A {
public static final A instance = new A();
private A() {}
}
但是,這種方法確實有一些極端的情況:您可以通過反射和序列化(如果A
可序列化)來創建額外的實例。 要真正實現單例,Java中最好的方法是使用枚舉:
public enum A {
INSTANCE;
// fields, methods etc go here
}
JVM將確保該過程中僅存在一個A.INSTANCE
。
這里的'a'
是指向創建的'new A()'
引用。一旦創建了一個對象,您就無法在使用單例模式時創建其他對象。使用A b = new A()
是錯誤的。
對象是實例。 類的實例(=一個案例或一個特定的例子),它們是用編程語言編寫的一些東西,它們定義了對象本身的語義。 使用單例時,您將使用私有構造函數定義一個類,這意味着只有該類的實例才能調用該構造函數,因此只有該類的實例才能創建該類的其他實例。 下一步是編寫一個說的方法。 “您要引用該對象的實例嗎?好吧,如果有人以前問過我,我會先創建它,然后再交給您,或者我給您一個已經創建的實例”。
因此,現在您正在問“等等,如果我需要該類的實例來獲取該類的實例,我如何在沒有該類的實例的情況下獲取該類的實例?!?”。 那里是一個復雜問題的簡單答案:使用靜態方法和字段
靜態代碼不屬於該類的任何實例,靜態變量和靜態方法代碼存儲在地址空間的其他區域中,因此您可以在擁有單例類的實例之前使用它
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.