3
public class SomeClass {  

    private static final SomeClass INSTANCE = new SomeClass();

    private SomeClass() {} 

    public static SomeClass getInstance() {return INSTANCE;}

    public static void main(String[] args) {
        System.out.println(getInstance()); 
    }
}

getInstanceメソッドが毎回同じ参照を返すのはなぜですか?

4

6 に答える 6

4

その理由は、フィールドINSTANCEが両方staticであるからfinalです。

staticそのスコープは、そのクラスの単一のインスタンスではなく、囲んでいるクラスにバインドされていることを意味します。(とにかくそのインスタンスを作成していませんが。) 実行中の Java プログラムでは、クラスに多数のインスタンスがある場合でも、各クラスは 1 つしかありません。

finalこのフィールドの値は、初期化後に変更できないことを意味します。

であるためstatic、オブジェクトの「スロット」は 1 つしかなくfinal、このスロットの内容は変更されないため、これらの内容を返すと常に同じものが返されます。

于 2013-07-27T16:28:49.087 に答える
3

INSTANCE定数 ( )への参照を割り当てており、getInstanceメソッドはその定数を返すため、常に同じ参照を返します。

于 2013-07-27T16:24:46.183 に答える
1

その理由は、インスタンスを宣言したためです

private static final SomeClass INSTANCE = new SomeClass();

とのようfinalに、インスタンスには単一のメモリstatic が割り当てられ、それも一定であるため、シングルトンパターン を使用しています

このようなものを見てみましょう - Java でのシングルトン パターン クラスの実装の紹介

ここに画像の説明を入力

于 2013-07-27T16:27:12.430 に答える
0

はい、クラスがロードされている限り、常に同じ参照を返します。これはstatic final

于 2013-07-27T16:25:50.807 に答える
0

INSTANTAは宣言さfinalれています。これは、一度初期化されるとその値を変更できないことを意味します。getInstantaしたがって、プログラムは常に同じインスタンスを返すことを保証します。

于 2013-07-27T16:26:28.723 に答える
0

method と constant の両方を宣言しましstaticた。これは、クラスから作成されたオブジェクトではなく、クラスのメンバーであることを意味します。クラスは一度しか存在しないため、常に同じオブジェクトを返します。さらに、変数はfinal新しいオブジェクトに割り当てることはできません。

于 2013-07-27T16:27:59.003 に答える