簡體   English   中英

Java單一實例意味着

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM