Kuwapp's Blog

Android と Flutter やってます

【Java】staticイニシャライザ

クラスのロード時に呼ばれるブロック
複数定義出来てコードの上にあるものから順番に呼ばれていく

class HogeClass {
     private static final int HOGE_INT;
     static {
          HOGE_INT = 50;
     }
     public HogeClass () {
           System.out.println("HOGE_INT : " + HOGE_INT);
     }
}

上記では定数のHOGE_INTがstatic初期化子内で50になる
コストの高い処理は定数化して、static初期化子内で計算したものを定数に代入し使い回すのが良いとのこと。
ここでは50を代入しているだけなのでほとんど処理速度は変わらないと思うけど
インスタンスを生成する必要があるものなどは大きく変わることもある

・EffectiveJavaの項目5「不必要なオブジェクトの生成は避ける」