クラスのロードとイニシャライズはアトミックではない
- 『mainメソッドの作成なしでのプログラムの実行』はJava7では動かなかった: 雪羽の発火後忘失
- mainメソッドの無いクラスを実行した際にスタティックイニシャライザが呼ばれるのは仕様では無かった: 雪羽の発火後忘失
と記述してきましたが、とっくの昔に説明されている方がいらっしゃいました。
こちらのエントリの中で、Class.forNameメソッドでstatic initializerが働くのが当たり前、というふうに書かれているのですが、理由がわかりませんでした(使ったことないし…)。
が、Javadocを見れば一目瞭然でした。 Class.forName(String, boolean, ClassLoader)
のパラメータの説明を見ると
initialize
- クラスを初期化する必要の有無
とありました( Class.forName(String)
の場合はtrue、つまり初期化有りです)。
このようにシンプルな説明ができるようになったところでこの話を終わります。
« mainメソッドの無いクラスを実行した際にスタティックイニシャライザが呼ばれるのは仕様では無かった | トップページ | Invalid pixel aspect ratio問題に対応したさきゅばす/coroid用ffmpeg for WIN »
この記事へのコメントは終了しました。
« mainメソッドの無いクラスを実行した際にスタティックイニシャライザが呼ばれるのは仕様では無かった | トップページ | Invalid pixel aspect ratio問題に対応したさきゅばす/coroid用ffmpeg for WIN »
コメント