teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2017/09/14 15:20

投稿

HogeAnimalLover
HogeAnimalLover

スコア4853

answer CHANGED
@@ -1,3 +1,7 @@
1
1
  はい。クラスに属するインスタンス生成をnew演算子で実行しているので、コンストラクタが呼び出されます。
2
2
 
3
- が、当該コードは少し特別なものです。また、多分コンパイル通りません(未確認、追記予定
3
+ が、当該コードは少し特別なものです。また、多分コンパイル通りません(未確認)。おそらく、当該コードはSingletonと呼ばれるデザインパターンのものを意図したものでしょう。ご覧の通り、このコンストラクタの中身がありません。つまり、**「インスタンス生成時にコンストラクタが呼び出される」ということはここでは重要ではありません。**
4
+
5
+ このコンストラクタの重要なところは**privateメソッドである**ことです。これはクラスの外部において、当該インスタンスのnewを文法レベルで禁止する記法となります。従って、クラス外部から可能なことは**staticフィールド、staticメソッドへのアクセス**のみとなります。つまり、**getMyClassメソッドはstaticでなければなりません。**
6
+
7
+ なお、Singletonクラスは性質上、**インスタンス生成時に必ずそのクラスのstaticメソッドを経由する**ことになります。このため、インスタンス生成に大きな制約を作ることができ、管理を用意とすることが趣旨とされています。(名前の通り、インスタンスを一つしか作らせないように使うことが多い。例えば、ハードウェアと直結するようなインスタンスについては複数存在する意味がないため)