1. 程式人生 > >關於System.err和System.out的使用區別

關於System.err和System.out的使用區別

在學習java標準輸出的時候,觀察到System.err和System.out的功能非常相似。

先去查找了一下java API,文件中給出的解釋如下:

out:

“標準”輸出流。此流已開啟並準備接受輸出資料。通常,此流對應於顯示器輸出或者由主機環境或使用者指定的另一個輸出目標。對於簡單獨立的 Java 應用程式,編寫一行輸出資料的典型方式是:System.out.println(data);

err:

“標準”錯誤輸出流。此流已開啟並準備接受輸出資料。通常,此流對應於顯示器輸出或者由主機環境或使用者指定的另一個輸出目標。按照慣例,此輸出流用於顯示錯誤訊息,或者顯示那些即使使用者輸出流(變數 out 的值)已經重定向到通常不被連續監視的某一檔案或其他目標,也應該立刻引起使用者注意的其他資訊。

字面上理解二者的區別即是out用於正常的使用者指定的輸出,而err專門用於顯示錯誤消失;

用以下簡單程式碼測試二者的區別:

public class PrintErrorAndDebug {
	public static void main(String args[]) {
               System.out.println("main*()方法開始運行了");
               System.err.println("測試有什麼區別");
               System.out.println("第一條");
               System.err.println("測試順序使用");
               System.out.println("第二條");
               System.out.println("第三條");
               System.out.println("第四條");
               System.out.println("第五條");
	}
}
分別運行了兩次,執行結果如下:

結果一:

結果二:

可以看到,有out.println輸出的字串相對順序沒有改變(黑色字型顯示),但是err.println輸出的字串位置隨機出現。同時注意到,err.println輸出的字串之間的相對位置也沒有改變,例如程式碼改為如下:

public class PrintErrorAndDebug {
	public static void main(String args[]) {
		System.err.println("main*()方法開始運行了");
		System.err.println("測試有什麼區別");
		System.out.println("第一條");
		System.err.println("測試順序使用");
		System.err.println("第二條");
		System.err.println("第三條");
		System.err.println("第四條");
		System.err.println("第五條");
	}
}

兩次執行結果如下:

結果一:


結果二:

小結:System.err和System.out的區別

區別1:API解釋的二者用途不同,out為標準輸出,err為標準錯誤輸出;

區別2:在eclipse裡執行,只管差別就是二者顯示的顏色有所區別;

區別3:查閱相關資料,System.out.println可能會被緩衝,而System.err.println不會,由於err不需要緩衝即可輸出,直接造成了我們視覺上看到的其位置的不確定性;

對這一塊理解還是不太深入,如果有新的發現會繼續補充。