2021年06月18日
( ここをクリックしてください )
モノトーンオブジェクト(Single Color Objects):このタイプでは、ヒップ領域に1つのオブジェクトしか作成できません.
お尻ですべてのオブジェクトを共有するために使用します.典型的な優先パラメータ.
環境設定情報をフィールドとして含むモノトーンオブジェクトがあります.
この設定情報は、1つのオブジェクトにのみ存在する必要があります.複数のオブジェクトに異なる内容がある可能性があるからです.
1つのオブジェクトのみが存在し、プログラムが起動して終了するまで生きていなければなりません.(=ゴミ収集器GC操作X)
ごみの対象
生成され、誰も使用していない場合は、GCが起動します.
new演算子呼び出しジェネレータの外部使用を阻止
:作成者の前にプライベートアクセス制限子を配置する
静的フィールドをクラス独自のタイプとして宣言
:独自のオブジェクトを作成して初期化します.
privateアクセス制限を貼り付けて、外部でフィールド値を変更しないようにします.
//staticはclazzに属します.メソッド領域を一度に挿入したclazzオブジェクトは、プログラムが終了するまで消えません.
(gcはhip領域のオブジェクトにのみ適用されます)
外部呼び出し用の静的メソッドgetInstance()宣言
:静的フィールドで参照したオブジェクトを返します.
オブジェクトを作成せずにメソッドを呼び出す必要があるため、静的メソッドとして宣言!!!
(プライベートなのでオブジェクトXを作成)
->>単一のトーンは共有され(heap領域のすべてのオブジェクトが共有されます)、保護されたボックスです.
このボックスはprivate staticとして作成され、データ配列(intArray)が含まれています.
これは、Clazzオブジェクトとして作成することを意味しません.
メソッド領域の大きさは大きくありません.この中で列を拡大するのは危険です.(仮想マシンが死ぬ可能性があります)
最も重要なのは、モノクロオブジェクトが「オブジェクト」です.
オブジェクトのデータは「フィールド」として存在します.
このフィールドはインスタンスフィールドです>>オブジェクトに存在するので、もちろん
したがって、静的キーワードX
テスト Singletonオブジェクト1 Singletonオブジェクトテスト2
->参照値に等しくなります.(OIDと同じ)
モノトーン
モノトーンオブジェクト(Single Color Objects):このタイプでは、ヒップ領域に1つのオブジェクトしか作成できません.
お尻ですべてのオブジェクトを共有するために使用します.典型的な優先パラメータ.
環境設定情報をフィールドとして含むモノトーンオブジェクトがあります.
この設定情報は、1つのオブジェクトにのみ存在する必要があります.複数のオブジェクトに異なる内容がある可能性があるからです.
1つのオブジェクトのみが存在し、プログラムが起動して終了するまで生きていなければなりません.(=ゴミ収集器GC操作X)
ごみの対象
生成され、誰も使用していない場合は、GCが起動します.
モノトーンの作り方
new演算子呼び出しジェネレータの外部使用を阻止
:作成者の前にプライベートアクセス制限子を配置する
静的フィールドをクラス独自のタイプとして宣言
:独自のオブジェクトを作成して初期化します.
privateアクセス制限を貼り付けて、外部でフィールド値を変更しないようにします.
//staticはclazzに属します.メソッド領域を一度に挿入したclazzオブジェクトは、プログラムが終了するまで消えません.
(gcはhip領域のオブジェクトにのみ適用されます)
外部呼び出し用の静的メソッドgetInstance()宣言
:静的フィールドで参照したオブジェクトを返します.
オブジェクトを作成せずにメソッドを呼び出す必要があるため、静的メソッドとして宣言!!!
(プライベートなのでオブジェクトXを作成)
//외부에서 역시 접근 불가능하게 private 접근제한자(access modifier) 로 은닉화(캡슐화)
// 단 한 번 생성될 싱글톤 객체의 주소를 보관할 필드 선언 -------------------(2)
private static Singleton singleton = new Singleton();
/////////////////
//모든 쓰레드, 모든 객체에서 공유할 데이터를 보관할 필드를 선언
/////////////////
private int[] intArray = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
static {
log.debug(">>>>>> static initializer invoked.");
Singleton.singleton = new Singleton();
} //static initializer : JVM이 오직 단 한번만 호출되도록 보장하는 블록
//외부에서는 호출 불가능하게 private접근제한자로 은닉화(캡슐화)
private Singleton() { //외부에서 new연산자로 호출 못하도록 private으로 선언 ---------(1)
;;
} //default constrctor
//외부에서 언제든 호출 가능하도록 하려면, 객체생성 없이도 호출할 수 있도록 static 메소드로 선언
//싱글톤 객체이 주소를 보관하고 있는 필드의 값을, 언제든 필요로 하는 다른 객체에 줄 수 있도록
//정적 메소드를 선언 -------------------(3)
static Singleton getInstance() {
return singleton;
} //getInstance
配列(intArray)に静的キーワードを貼り付けないのはなぜですか?->>単一のトーンは共有され(heap領域のすべてのオブジェクトが共有されます)、保護されたボックスです.
このボックスはprivate staticとして作成され、データ配列(intArray)が含まれています.
これは、Clazzオブジェクトとして作成することを意味しません.
メソッド領域の大きさは大きくありません.この中で列を拡大するのは危険です.(仮想マシンが死ぬ可能性があります)
最も重要なのは、モノクロオブジェクトが「オブジェクト」です.
オブジェクトのデータは「フィールド」として存在します.
このフィールドはインスタンスフィールドです>>オブジェクトに存在するので、もちろん
したがって、静的キーワードX
テスト
public static void main(String[] args) {
/*
* Singleton obj1 = new Singleton(); //컴파일 에러
* Singleton obj2 = new Singleton(); //컴파일 에러
*/
//싱글톤 객체 레퍼런스 얻기
Singleton obj1 = Singleton.getInstance();
Singleton obj2 = Singleton.getInstance();
// 동등비교연산자를 참조변수에 수행할 때에는, 두 참조변수에 있는 주소값을 비교하는 것!
if (obj1 == obj2) {
log.info("같은 Singleton 객체 입니다.");
}else {
log.info("다른 Singleton 객체 입니다.");
} //if-else
}//main
->同じオブジェクトであることを確認できます.public static void main(String[] args) {
/*
* Singleton obj1 = new Singleton(); //컴파일 에러
* Singleton obj2 = new Singleton(); //컴파일 에러
*/
for(int i=1; i<=10; i++) {
Singleton obj = Singleton.getInstance();
log.info(String.format("[%d] obj : [%s]", i, obj));
}//for
}//main
->参照値に等しくなります.(OIDと同じ)
Reference
この問題について(2021年06月18日), 我々は、より多くの情報をここで見つけました https://velog.io/@mindddi/2021-06-18-강의록싱글톤テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol