簡體   English   中英

System.out.println() 和 System.err.println() 的區別

[英]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.errSystem.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM