Java статический класс / переменные - PullRequest
5 голосов
/ 30 марта 2012

Не уверен насчет статических переменных.

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") рассчитывается несколько раз или только один раз и когда?

Заранее спасибо.

Ответы [ 2 ]

11 голосов
/ 30 марта 2012

Он вызывается один раз для загрузчика классов. Что обычно означает один раз.

Статическая переменная инициализируется, как только объявивший ее класс загружается загрузчиком классов, и остается там до тех пор, пока загрузчик классов не будет уничтожен, что в большинстве случаев означает - в конце выполнения программы / жизненного цикла приложения.

0 голосов
/ 30 марта 2012

Всего один раз. AFAIK, когда класс загружен.

...