System.out.println与System.err.println的区别
生活随笔
收集整理的這篇文章主要介紹了
System.out.println与System.err.println的区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、System.out.println ? 能重定向到別的輸出流,這樣的話你在屏幕上將看不到打印的東西了, ??
? 而System.err.println只能在屏幕上實現打印,即使你重定向了也一樣。
System.setOut(new ? PrintStream(new ? FileOutputStream(new ? File( "c:/test.txt "))));?
? ? ? ? ? ? System.out.println( "haha ");?
2、
當向控制臺輸出信息時,開發者有兩個選擇:System.out和System.err。使用者更傾向于輸出的是System.out,而如果是 System.err則輸出“error”。盡管這看起來是顯而易見的,但很多開發者都不了解為什么出錯和調試時使用System.err。 ? ??
? 當輸出一個流時,JVM和操作系統共同決定何時輸出這個流。也就是說,盡管開發者鍵入了: ??
? System.out.print_ ??
? ("Test ? Output:"); ??
? JVM和操作系統的組合體并不會立即輸出這個流。相反,它將保持等待狀態直到將要輸出的東西達到一定的量。 ??
? 假設輸入以下指令: ??
? System.out.println("Debugging ? Info."); ??
? JVM可能同意輸出;然而,操作系統可能決定暫不輸出。 ??
? 由于這個原因,在調試程序時想要發現出錯的位置就有可能成為問題。考慮以下的程序: ??
? ??
? for(int ? i=0; ? i<56; ? i++) ? { ??
? System.out.println(i); ??
? ... ? // ? containing ? an ? error ??
? } ??
? 錯誤可能出現在i等于54時,但是可能JVM在i等于49時就結束輸出了。50到54仍然存在于緩存中,結果也就丟失了。 ??
? ??
? 使用System.err來報告錯誤、調試程序就可以避免這種情況出現,它將使每一次操作的結果都輸出出來。例如以下程序: ??
? ??
? for(int ? i=0; ? i<56; ? i++) ? { ??
? System.err.println(i); ??
? ... ? // ? containing ? an ? error ??
? } ??
? 在每一次i等于54時都將顯示錯誤信息。
3、System.out.println可能會被緩沖,而System.err.println不會
4、System.err和System.out ? 就是錯誤輸出和標準輸出?
如果你用LOG4J記錄日志的話,且設定錯誤等級的話?
System.err的輸出是將記錄到日志中
5、輸出設備是一樣的 ? 所以你看到的是一樣的 ? ??
? System.setErr() ? System.setOut() ? 是重定向兩個流的方法。 ??
? 以下為Sun ? JDK1.5中文文檔中的 ? 可能有點泛泛了 ??
? ------------------------------ ??
? System.err ??
? “標準”錯誤輸出流。此流已打開并準備接受輸出數據。 ??
? ??
? 通常,此流對應于顯示器輸出或者由主機環境或用戶指定的另一個輸出目標。按照慣例,此輸出流用于顯示錯誤消息,或者顯示那些即使用戶輸出流(變量 ? out ? 的值)已經重定向到通常不被連續監視的某一文件或其他目標,也應該立刻引起用戶注意的其他信息。 ? ??
? ??
? System.out ??
? “標準”輸出流。此流已打開并準備接受輸出數據。通常,此流對應于顯示器輸出或者由主機環境或用戶指定的另一個輸出目標。
6、System.err.println()是要緩沖的,所以優先級會高點,而System.out.println()是不需要緩沖的,所以優先級會低點.
? 而System.err.println只能在屏幕上實現打印,即使你重定向了也一樣。
System.setOut(new ? PrintStream(new ? FileOutputStream(new ? File( "c:/test.txt "))));?
? ? ? ? ? ? System.out.println( "haha ");?
2、
當向控制臺輸出信息時,開發者有兩個選擇:System.out和System.err。使用者更傾向于輸出的是System.out,而如果是 System.err則輸出“error”。盡管這看起來是顯而易見的,但很多開發者都不了解為什么出錯和調試時使用System.err。 ? ??
? 當輸出一個流時,JVM和操作系統共同決定何時輸出這個流。也就是說,盡管開發者鍵入了: ??
? System.out.print_ ??
? ("Test ? Output:"); ??
? JVM和操作系統的組合體并不會立即輸出這個流。相反,它將保持等待狀態直到將要輸出的東西達到一定的量。 ??
? 假設輸入以下指令: ??
? System.out.println("Debugging ? Info."); ??
? JVM可能同意輸出;然而,操作系統可能決定暫不輸出。 ??
? 由于這個原因,在調試程序時想要發現出錯的位置就有可能成為問題。考慮以下的程序: ??
? ??
? for(int ? i=0; ? i<56; ? i++) ? { ??
? System.out.println(i); ??
? ... ? // ? containing ? an ? error ??
? } ??
? 錯誤可能出現在i等于54時,但是可能JVM在i等于49時就結束輸出了。50到54仍然存在于緩存中,結果也就丟失了。 ??
? ??
? 使用System.err來報告錯誤、調試程序就可以避免這種情況出現,它將使每一次操作的結果都輸出出來。例如以下程序: ??
? ??
? for(int ? i=0; ? i<56; ? i++) ? { ??
? System.err.println(i); ??
? ... ? // ? containing ? an ? error ??
? } ??
? 在每一次i等于54時都將顯示錯誤信息。
3、System.out.println可能會被緩沖,而System.err.println不會
4、System.err和System.out ? 就是錯誤輸出和標準輸出?
如果你用LOG4J記錄日志的話,且設定錯誤等級的話?
System.err的輸出是將記錄到日志中
5、輸出設備是一樣的 ? 所以你看到的是一樣的 ? ??
? System.setErr() ? System.setOut() ? 是重定向兩個流的方法。 ??
? 以下為Sun ? JDK1.5中文文檔中的 ? 可能有點泛泛了 ??
? ------------------------------ ??
? System.err ??
? “標準”錯誤輸出流。此流已打開并準備接受輸出數據。 ??
? ??
? 通常,此流對應于顯示器輸出或者由主機環境或用戶指定的另一個輸出目標。按照慣例,此輸出流用于顯示錯誤消息,或者顯示那些即使用戶輸出流(變量 ? out ? 的值)已經重定向到通常不被連續監視的某一文件或其他目標,也應該立刻引起用戶注意的其他信息。 ? ??
? ??
? System.out ??
? “標準”輸出流。此流已打開并準備接受輸出數據。通常,此流對應于顯示器輸出或者由主機環境或用戶指定的另一個輸出目標。
6、System.err.println()是要緩沖的,所以優先級會高點,而System.out.println()是不需要緩沖的,所以優先級會低點.
總結
以上是生活随笔為你收集整理的System.out.println与System.err.println的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java读取Excel内容
- 下一篇: win7网络连接优先级设置