###前提・実現したいこと
①デザインパターン・シングルトンの仕組みがよくわからないです。以下のプログラムを実行するとコンソールには10回同じ値が表示されるらしいのですが、どうしてそうなるのでしょうか? また、表示されている値は何なのでしょうか? ②if (_instance == null)とありますが、_instanceを宣言時に=nullと宣言していないので、 ifの条件文は必ずfalseになると思ったのですが、どうしてそうならないのでしょうか? また、ExerciseSingleton型 変数名_instanceとあるのですが、これは参照型の中のクラス型に 分類されるという意識で宜しいでしょうか? ③_instance = new ExerciseSingleton()により_instanceにはExerciseSingleton()が代入されているので、for文の2回目の処理時には_instanceはすでにnullではないと思っているのですが、合ってますでしょうか? ④private volatile static ExerciseSingleton _instance;とあり、直訳するとこのクラス 型の変数になると思うのですが、イメージが出来ないです。どのように捉えれば宜しいのでしょうか? ⑤メソッドの戻り値がこのクラスの型となっていますが、これもうまくイメージする事ができないです。どのように捉えれば宜しいのでしょうか? ⑥if (_instance == null)を2回使用していますが、機械は人間ではないので、同じ事を聞くという再確認をしなくても計算ミスをしないと思うのですが、なぜこれを2回も書くのでしょうか?
###コンソールの表示
exercise_java_class02.ExerciseSingleton@3d4b7453 exercise_java_class02.ExerciseSingleton@3d4b7453 exercise_java_class02.ExerciseSingleton@3d4b7453 exercise_java_class02.ExerciseSingleton@3d4b7453 exercise_java_class02.ExerciseSingleton@3d4b7453 exercise_java_class02.ExerciseSingleton@3d4b7453 exercise_java_class02.ExerciseSingleton@3d4b7453 exercise_java_class02.ExerciseSingleton@3d4b7453 exercise_java_class02.ExerciseSingleton@3d4b7453 exercise_java_class02.ExerciseSingleton@3d4b7453
###該当のソースコード
java
1public class ExerciseSingleton { 2 3 /** 4 * 5 */ 6 private ExerciseSingleton() { 7 // TODO 自動生成されたコンストラクター・スタブ 8 } 9 10 /** 11 * @param args 12 */ 13 14 // 本クラス唯一インスタンス 15 16 private volatile static ExerciseSingleton _instance; 17 18 public static ExerciseSingleton getInstance() { 19 20 if (_instance == null) { 21 22 // 他のプログラム(クラス)からのアクセスを不可にする 23 // ワードで言う編集中なので、他の人は編集不可な状態の宣言 24 25 synchronized (ExerciseSingleton.class) { 26 27 if (_instance == null) { 28 29 _instance = new ExerciseSingleton(); 30 31 } 32 } 33 } 34 return _instance; 35 } 36 37 public static void main(String[] args) { 38 // TODO 自動生成されたメソッド・スタブ 39 40 for (int i = 0; i < 10; i++) { 41 42 System.out.println(ExerciseSingleton.getInstance()); 43 44 } 45 46 } 47 48}
###補足情報(言語/FW/ツール等のバージョンなど)
java1.6 eclipse mars
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。