strange 'out' variable, System.out.println()
java, nullpointerexception
Solution
Take a look at the `private static void initializeSystemClass()` - this method is called to start things up, it calls `setOut0()` which is a `native` method. This ties the `Stream` into where it's supposed to be.
So even though the field may look `public static final` it actually isn't, the `native` code changes it.
EDIT
OP asks Then why JLS needs nullPrintStream method?
This is to do with the java compiler - it will "inline" `static final` fields if they are assigned to something constant at compile time, like `null`. The compiler will actually replace each reference to the field with the constant.
This would break the initialisation as objects would no longer hold a reference to the `Stream` but to `null`. Assigning the stream to the return of a method prevents the inlining.
Some might call it a dirty hack. To misquote Bismarck "The JDK is like sausages, it's best not to see it being made".
Problem
Following is the code from java.lang.System class (JDK version 1.6) ``` public final static PrintStream out = nullPrintStream(); //out is set to 'null' private static PrintStream nullPrintStream() throws NullPointerException { if (currentTimeMillis() > 0) { return null; } throw new NullPointerException(); } ``` when we write `System.out.println("Something");` in our code then why don't we get NullPointerException even when 'out' is set to 'null' Anyhow `out` will be set via following `setOut` method in System class ``` public static void setOut(PrintStream out) { checkIO(); setOut0(out); } ``` Theyn why JLS needs `nullPrintStream` method ?