"out"のドキュメントコードは、パッケージlangのSystemクラスで初期化されるPrintStreamクラスのオブジェクトです。このオブジェクト"out"はnullに初期化されます。なぜコードがスローされないのですか行のたびにヌルポインタ例外が発生する。nullポインタ例外が存在しないのはなぜですか?
System.out.println(...);が使用されている
"out"のドキュメントコードは、パッケージlangのSystemクラスで初期化されるPrintStreamクラスのオブジェクトです。このオブジェクト"out"はnullに初期化されます。なぜコードがスローされないのですか行のたびにヌルポインタ例外が発生する。nullポインタ例外が存在しないのはなぜですか?
System.out.println(...);が使用されている
変数は、System
の静的変数です。これはデフォルトのoutputStreamであり、nullではありません。
Javaドキュメント:このストリームはすでに開いており、出力データを受け入れる準備ができています。
これは間違っています。最初はnullに初期化され、その後正しい 'PrintStream'に初期化されます。 – marstran
'out'は実際には' final static'変数であり、後で[これを見る](http://stackoverflow.com/questions/31743760/system-out-is-declared-as-static-final-and)で初期化されます-initialized-with-null) – SomeJavaGuy
nullに初期化される最終的な静的変数です。 – iavanish
フィールド宣言です。
setOut0(newPrintStream(fdOut, props.getProperty("sun.stdout.encoding")))
out
はよくVMによって時に初期化されます。initializeSystemClass()
静的メソッドで
ルック。
方法はこれにコメントされている:
/**
* Initialize the system class. Called after thread initialization.
*/
http://stackoverflow.com/questions/3406703/whats-the-meaning-of-system-out-println-in-java –
ため'JVM'は' null'で 'out'を初期化し、その後デフォルト' PrintStream'に設定します – SomeJavaGuy
*** native ***はここのトリックです! –