スコープの実行順
初期化子には static { }, { }, クラス名 { }(コンストラクタのこと)がある。
final staticのフィールドもstatic { }の中では変更できるみたいです。
finalのフィールドは{}とクラス名{}の中なら可能。
http://www.ne.jp/asahi/hishidama/home/tech/java/strange.html
いつもながらここのサイトに詳しく書かれてます。
以下はそれぞれの初期化子の呼び出しの順番のテスト
class ScopeTest { static String s1; final static String s2; String s3; final String s4; static { p("-- static initialize --"); s1 = "static String"; s2 = "final static String"; p(s1); p(s2); } { p("-- local initialize --"); s3 = "String"; s4 = "final String"; p(s3); p(s4); } static void p(Object o) { System.out.println(o); } ScopeTest() { p("-- construct --"); } public static void main(String[] args) { new ScopeTest(); } }