2012-03-29 19 views
5

静的変数についてはわかりません。Java静的クラス/変数

import java.io.File; 

public class Logger { 
    public static final File log = new File(File.listRoots()[0], "log.log"); 
    public static void log (String message) { 
     /* ... */ 
    } 
} 

は、プログラムの生活を通して同じメモリに変数log指していますか?基本的にlogの定義new File(File.listRoots()[0], "log.log")が複数回計算されたか、1つだけ計算されますか?

ありがとうございます。

答えて

11

クラスローダーごとに1回呼び出されます。これは通常、一度を意味します。

静的変数は、クラスローダーによって宣言されたクラスが宣言するとすぐに初期化され、クラスローダーが破棄されるまでそこにとどまります。ほとんどの場合、プログラム実行/アプリケーションライフサイクルが終了します。

+0

'File f = Logger.log'のように私がアクセスすると、私はクラスの新しいインスタンスを作成しています。 –

+0

いいえ、それは同じです。 – Bozho

+0

'File f = Logger.log'は、既にインスタンス化された単一のファイルへの新しい参照を作成します。 –

0

一度だけ。 AFAIK、クラスがロードされるとき。