main メソッドがなくてもコードが実行できる裏技が Java 7 で封じられた
class Test { static { System.out.println("Hello"); } }
こんな main メソッドのないクラスをコンパイルして以下の要領で実行すると:
java Test
Java 1.6 までなら:
Hello Exception in thread "main" java.lang.NoSuchMethodError: main
という具合に static 節が実行されてから main が見つからないエラーメッセージが表示されていたが、Java 1.7 では:
エラー: メイン・メソッドがクラスTestで見つかりません。次のようにメイン・メソッドを定義してください。 public static void main(String[] args)
という具合に、main メソッドの存在を先にチェックするように振る舞いが変わってしまった。
このテクニック?は main メソッドを書かずに処理が行える裏技だったのだが、Java 7 で封じられてしまった。