title: In the System.java source, the standard input, output and error streams are declared final and initialized null?
body: <pre><code>public final static InputStream in = null;
  public final static PrintStream out = null;
  public final static PrintStream err = null;
  </code></pre>
  
  <p>But as we very well know, these streams are connected to the console by default and already open. There are also methods in the System class setIn(), setOut, and setErr() to redirect the streams. How is any of this possible when they have been declared final and set to the initialization value null?</p>
  
  <p>I compiled the following code, set a breakpoint at the call to println() and debugged using netbeans. My objective was to determine exactly when the variable System.in is initialized to the standard output by stepping into the source. But it seems that the output stream out is already initialized by the time the main method is called.</p>
  
  <pre><code>public static void main(String[] args) {
      System.out.println("foo");
  }
  </code></pre>