2012-03-29 4 views
5

Non sicuro delle variabili statiche.java static class/variables

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

è la variabile log che punta alla stessa memoria per tutta la durata del programma? Fondamentalmente è la definizione lognew File(File.listRoots()[0], "log.log") calcolata più volte o solo una, e quando?

Grazie in anticipo.

risposta

11

Viene richiamato una volta per classloader. Che, normalmente, significa una volta.

Una variabile statica viene inizializzata non appena la classe dichiara che viene caricata dal classloader e rimane lì fino a quando il classloader non viene distrutto, il che nella maggior parte dei casi significa - al termine dell'esecuzione del programma/ciclo di vita dell'applicazione.

+0

E se accedo come 'File f = Logger.log' sto creando una nuova istanza della classe. –

+0

no, è lo stesso. – Bozho

+0

'File f = Logger.log' crea un nuovo riferimento al singolo file già istanziato. –

0

Solo una volta. AFAIK, quando la classe è caricata.