2012-03-12 22 views
2

使用java reflectionリフレクション対象のすべてのクラスが静的コンストラクタを実行することに気付きました。これらの静的コンストラクタを強制的に戻したり、実行したりすることはできますか?Java静的初期化子とリフレクション

+1

私の推測はこの質問には無意味ですが、SOの集約された知識をチェックアウトするだけです – fmsf

答えて

7

いいえ。静的イニシャライザは、クラスがクラスローダによってロードされ、初期化されるとすぐに呼び出されます。

+0

JDK5.1.4のJLSのためのJLSの状態は異なっていますか?静的初期化子は、クラスが初期化されると呼び出されます。クラスをロードするだけで、クラスは初期化されません。 – blackdrag

+0

ああ、はい、私は文言を修正します。とにかく、反射を使用して両方の:) – Bozho

0

私は何Bozhoが答えることは今短すぎると思うので、私は、私の答えを追加;)

リフレクションだけそれを初期化しないクラスをロードし、クラスを初期化することができます。たとえば、静的フィールドから値を要求すると、実際の値を取得する前に静的イニシャライザが呼び出されます。フィールドを取得するだけでは通常得られません。したがって、あなたのリフレクションコードが静的イニシャライザを実行させ、実際にそれを正確に行う必要がある場合、イニシャライザが呼び出されないようにする方法はありません。あなたが彼らが呼び出されることを避けたい場合は、あなたが反射で行うことを変更する必要があります。

関連する問題