7

私は次のクラスを持っています

public class MyClass
{
    private static final Logger logger = Logger.getLogger(MyClass.class);

    static
    {
        logger.info("some text");
    }
}

logger.infoに到達するまでに、log4j システムが初期化され、ログを出力する準備ができていると想定しても安全ですか?

有効な Logger インスタンスを実行しLogger.getLogger()て取得できた場合、Log4j が初期化されていることを意味しているようですよね?

4

2 に答える 2

7

はい、そうです。静的初期化子 (つまり、static {}静的変数へのブロックと初期代入の両方) は、宣言された順序で実行されます。

log4j のデフォルトの初期化は、クラスがロードLogManagerされると実行されるlog4j クラスの静的ブロックに依存し、最初の使用の前にロードされます。Loggerこれが、あなたの建設が機能する理由です。

于 2012-09-19T08:10:46.163 に答える
0

JLSのこの部分を参照してください。クラスを初期化するとどうなるかについて説明します。この部分では、静的初期化子について説明します。あなたの質問に答えると、私の知る限り、静的ブロックは発生順に実行されます。それらは、クラスのインスタンスを作成するか、その静的変数/メソッドにアクセスするときに発生する可能性のあるクラスがロードされるときに実行されます。

于 2012-09-19T08:19:04.177 に答える