2012-03-29 7 views
5

Nie jestem pewien na temat zmiennych statycznych.java klasa statyczna/zmienne

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) { 
     /* ... */ 
    } 
} 

jest zmienną log wskazując na tej samej pamięci przez cały okres programu? Zasadniczo jest log definicja obliczana wiele razy lub tylko raz, a kiedy?

Z góry dziękuję.

Odpowiedz

11

Jest wywoływany raz dla każdego programu ładującego klasy. Który, normalnie, oznacza raz.

Zmienna statyczna jest inicjowana, gdy tylko klasa zadeklaruje, że jest ładowana przez moduł ładujący klasy, i pozostaje tam, dopóki program ładujący klasy nie zostanie zniszczony, co w większości przypadków oznacza - po zakończeniu cyklu wykonywania programu/aplikacji.

+0

co, jeśli mam do niego dostęp w stylu 'File f = Logger.log', tworzę nowe wystąpienie klasy. –

+0

nie, to jest to samo. – Bozho

+0

'Plik f = Logger.log' tworzy nowe odniesienie do pojedynczego pliku, który został już utworzony. –

0

Tylko raz. AFAIK, gdy klasa jest załadowana.