Staticなメンバ、メソッドへのアクセス時にコンストラクタは呼び出されない。

時々曖昧になる、オブジェクト指向の挙動をメモ。

  1. /**
  2.  * サンプルクラス
  3.  */
  4. public class Sample01
  5. {
  6.   final static String CONST = "const";
  7.   public Sample01()
  8.   {
  9.     System.out.println( "hoge" );
  10.   }
  11.   static public void printText()
  12.   {
  13.     System.out.println( "moge" );
  14.   }
  15. }

のようなクラスに対して

  1. System.out.println( Sample01.CONST );
  2. Sample01.printText();

のようにインスタンス生成せずに呼び出された場合に、コンストラクタは一度も呼び出されない。


この挙動はJavaPHPの両方です。


メソッドがstaticだったり非staticだったりするようなクラス(この時点で設計ミスかも)は気をつけないと混乱する。

いっそ、staticメソッドしか持たないクラスはコンストラクタをprivateにしてインスタンス生成させない、くらいの縛りがあっても良いかもしれない。