2017-04-25 162 views
-2

java 的文檔代碼「out」是PrintStream類的一個對象,它在包的lang類的System類中初始化。此對象「out」被初始化爲null.So爲什麼不將代碼拋出每當該行發生空指針異常爲什麼沒有空指針異常?

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

***本地***是這裏的訣竅! –

回答

-1

.out變量是一個靜態變量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-null) – SomeJavaGuy

+0

它是一個初始化爲null的最終靜態變量。 – iavanish

3

這是外地宣言。

看那initializeSystemClass()靜態方法:

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

out很好初始化在由虛擬機的時間。

的方法評價與此:

/** 
* Initialize the system class. Called after thread initialization. 
*/