System.out è dichiarato come statico finale e inizializzato con null?

Quando stavo passando per System.class ho trovato qualcosa che mi sembrava strano. Quando si guarda la dichiarazione di System.in, System.out, System.err questi vengono declassati come final static ma anche inizializzati con null

 public final static InputStream in = null; public final static PrintStream out = null; public final static PrintStream err = null; 

Dal momento che la final può essere inizializzata solo una volta, quindi, come vengono gestiti?
Quando usiamo System.out.print("..."); È ovvio che out non è null ma essendo final static come non è null ?

Quindi qualcuno può spiegare come è inizializzato il fuori che è già dichiarato definitivo?