2012-03-29 2 views
5

Unsicher über statische Variablen.Java statische Klasse/Variablen

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

Ist die Variable log zeigt auf den gleichen Speicher während der gesamten Lebensdauer des Programms? Grundsätzlich wird die log Definition new File(File.listRoots()[0], "log.log") mehrfach oder nur einmal berechnet, und wann?

Vielen Dank im Voraus.

Antwort

11

Es wird einmal pro Classloader aufgerufen. Was normalerweise einmal bedeutet.

Eine statische Variable wird initialisiert, sobald die Klasse, die sie deklariert, vom Klassenlader geladen wird und dort bleibt, bis der Klassenlader zerstört wird, was in den meisten Fällen bedeutet - am Ende des Programmablaufs/Anwendungslebenszyklus.

+0

was, wenn ich darauf zugreifen wie 'File f = Logger.log' Ich erstelle eine neue Instanz der Klasse. –

+0

nein, es ist das gleiche. – Bozho

+0

'File f = Logger.log' erstellt einen neuen Verweis auf die einzelne Datei, die bereits instanziiert wurde. –

0

Nur einmal. AFAIK, wenn die Klasse geladen ist.