62

System.out.println()Java和Java有什么区别System.err.println()

4

7 回答 7

81

在 JavaSystem.out.println()中将打印到您正在使用的系统之外的标准。另一方面,System.err.println()将打印到标准错误。

如果您使用的是简单的 Java 控制台应用程序,两个输出将是相同的(命令行或控制台),但您可以重新配置流,例如,System.out仍然打印到控制台但System.err写入文件。

此外,像 Eclipse 这样的 IDE默认System.err以红色文本和黑色文本显示。System.out

于 2010-07-02T05:26:04.437 回答
38

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”。

您可以设置执行环境来区分这两个流,例如,将标准输出打印到屏幕,将错误输出打印到文件。

于 2010-07-02T05:44:22.097 回答
4

这些命令使用不同的输出流。默认情况下,这两条消息都将打印在控制台上,但例如可以将其中一条或两条重定向到一个文件。

java MyApp 2>errors.txt

这将重定向System.errerrors.txt文件。

于 2010-07-02T05:26:29.157 回答
2

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

于 2010-07-02T05:28:32.630 回答
1

这个答案很可能对您有帮助,它非常简单 System.err,并且System.out两者都相同,都在类中定义为类 System的引用变量, 并且 PrintStreampublic final static PrintStream out = null;public final static PrintStream err = null;

表示两者都是参考。类的变量PrintStream。通常System.err用于打印错误消息,这增加了程序员的可编辑性。

当我们使用重定向运算符时,两者都有一个细微的差别。

于 2019-03-16T08:09:40.773 回答
1

System.out.println("wassup");是指当您必须输出与用户给出的正确输入有关的某个结果时,而是System.err.println("duh, that's wrong);显示提供的输入错误或存在其他错误的参考。

大多数 IDE 以红色 ( System.err.print) 显示这一点。

于 2019-03-16T03:39:52.490 回答
-2

值得注意的是,一个操作系统有一个 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");
    }
}
于 2017-01-29T10:01:34.727 回答