![](/img/trans.png)
[英]System.out.println and System.err.println out of order
[英]difference between System.out.println() and System.err.println()
Java 中的System.out.println()
和System.err.println()
什么區別?
在 Java 中System.out.println()
將打印到您正在使用的系統之外的標准。 另一方面, System.err.println()
將打印到標准錯誤。
如果您使用的是簡單的 Java 控制台應用程序,則兩個輸出將相同(命令行或控制台),但您可以重新配置流,例如, System.out
仍會打印到控制台,但System.err
寫入文件.
此外,默認情況下,Eclipse 等 IDE 以紅色文本顯示System.err
,以黑色文本顯示System.out
。
System.out 是“標准輸出”(stdout),System.err 是“錯誤輸出”(stderr)。 與 System.in (stdin) 一起,這些是 Unix 模型中的三個標准 I/O 流。 大多數現代編程環境(C、Perl 等)都支持這種模型。
標准輸出流用於打印程序“正常操作”的輸出,而錯誤流用於“錯誤消息”。 這些需要分開——盡管在大多數情況下它們出現在同一個控制台上。
假設您有一個簡單的程序,您可以在其中輸入電話號碼並打印出擁有該號碼的人。 如果您輸入一個無效號碼,程序應該通知您該錯誤,但它不應該這樣做作為答案:如果您輸入“999-ABC-4567”並且程序打印一條錯誤消息“Not a valid number” ,這並不意味着有一個名為“無效號碼”的人,其號碼是 999-ABC-4567。 因此,它不會向標准輸出輸出任何內容,並且會在錯誤輸出中輸出消息“Not a valid number”。
您可以設置執行環境來區分這兩個流,例如,將標准輸出打印到屏幕和錯誤輸出打印到文件。
這些命令使用不同的輸出流。 默認情況下,這兩條消息都將打印在控制台上,但例如可以將其中一個或兩個重定向到一個文件。
java MyApp 2>errors.txt
這會將System.err
重定向到errors.txt
文件。
System.out
的主要目的是提供標准輸出。
System.err
的主要目的是給出標准錯誤。
看看這些
http://www.devx.com/tips/Tip/14698
http://wiki.eclipse.org/FAQ_Where_does_System.out_and_System.err_output_go%3F
System.out.println("wassup");
指的是當您必須輸出與用戶給出的正確輸入有關的某個結果時,而System.err.println("duh, that's wrong);
是表明提供的輸入錯誤或存在其他錯誤的參考.
大多數 IDE 以紅色( System.err.print
)顯示這一點。
這個答案很可能對你有幫助,它非常簡單System.err
和System.out
兩者都是相同的,兩者都在System
類中定義為PrintStream
類的引用變量,作為public final static PrintStream out = null;
和public final static PrintStream err = null;
意味着兩者都是參考。 PrintStream
類的變量。 通常System.err
用於打印錯誤消息,這增加了程序員的可紅性。
當我們使用重定向運算符時,兩者都有細微的差別。
值得注意的是,操作系統有一個用於 System.err 和 System.out 的隊列。 考慮以下代碼:
public class PrintQueue {
public static void main(String[] args) {
for(int i = 0; i < 100; i++) {
System.out.println("out");
System.err.println("err");
}
}
}
如果編譯並運行該程序,您會看到控制台中的輸出順序混亂。
如果您只使用 System.out 或 System.err,操作系統將保持正確的順序。 但是如果你同時使用這兩個,它可以隨機選擇在控制台旁邊打印什么。
即使在此代碼片段中,您也可以看到順序有時會混淆:
public class PrintQueue {
public static void main(String[] args) {
System.out.println("out");
System.err.println("err");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.