2017-04-25 11 views
-2

"out"のドキュメントコードは、パッケージlangのSystemクラスで初期化されるPrintStreamクラスのオブジェクトです。このオブジェクト"out"はnullに初期化されます。なぜコードがスローされないのですか行のたびにヌルポインタ例外が発生する。nullポインタ例外が存在しないのはなぜですか?

System.out.println(...);が使用されている

+0

http://stackoverflow.com/questions/3406703/whats-the-meaning-of-system-out-println-in-java –

+4

ため'JVM'は' null'で 'out'を初期化し、その後デフォルト' PrintStream'に設定します – SomeJavaGuy

+2

*** native ***はここのトリックです! –

答えて

-1

変数は、Systemの静的変数です。これはデフォルトのoutputStreamであり、nullではありません。

Javaドキュメント:このストリームはすでに開いており、出力データを受け入れる準備ができています。

+0

これは間違っています。最初はnullに初期化され、その後正しい 'PrintStream'に初期化されます。 – marstran

+0

'out'は実際には' final static'変数であり、後で[これを見る](http://stackoverflow.com/questions/31743760/system-out-is-declared-as-static-final-and)で初期化されます-initialized-with-null) – SomeJavaGuy

+0

nullに初期化される最終的な静的変数です。 – iavanish

3

フィールド宣言です。

setOut0(newPrintStream(fdOut, props.getProperty("sun.stdout.encoding"))) 

outはよくVMによって時に初期化されます。initializeSystemClass()静的メソッドで

ルック。

方法はこれにコメントされている:

/** 
* Initialize the system class. Called after thread initialization. 
*/ 
関連する問題