System.out.println()和System.err.println()之间的区别

时间:2010-07-02 05:23:11

标签: java println system.out system.err

Java中System.out.println()System.err.println()之间有什么区别?

7 个答案:

答案 0 :(得分:58)

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

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

此外,像Eclipse这样的IDE在红色文本中显示System.err,默认情况下以黑色文本显示System.err

答案 1 :(得分:25)

System.out是“标准输出”(stdout),System.err是“错误输出”(stderr)。与System.in(stdin)一起,这些是Unix模型中的三个标准I / O流。大多数现代编程环境(C,Perl等)都支持这种模型。

标准输出流用于打印程序“正常操作”的输出,而错误流用于“错误消息”。这些需要分开 - 尽管在大多数情况下它们出现在同一个控制台上。

假设您有一个简单的程序,您可以在其中输入电话号码并打印出具有该号码的人。如果输入的数字无效,程序应通知您该错误,但不应该作为答案:如果输入“999-ABC-4567”并且程序输出错误消息“不是有效数字”,这并不意味着有一个名为“非有效数字”的人,其编号为999-ABC-4567。因此它不打印任何标准输出,并且错误输出中会显示消息“Not a valid number”。

答案 2 :(得分:4)

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

java MyApp 2>errors.txt

这会将System.err重定向到errors.txt文件。

答案 3 :(得分: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

答案 4 :(得分:0)

System.out.println("wassup");是指您必须输出与用户给出的正确输入有关的特定结果,而System.err.println("duh, that's wrong);是参考,表明所提供的输入错误或存在其他错误

大多数IDE都以红色(System.err.print来显示。

答案 5 :(得分:0)

这个答案很可能对您有所帮助 System.errSystem.out都是相同的,两者在System类中定义为PrintStream类的引用变量,如下: public final static PrintStream out = null;  和 public final static PrintStream err = null;

均指参考。 PrintStream类的变量。 通常System.err用于打印错误消息,这会增加程序员的可靠性。

当我们使用重定向运算符时,两者的差异很小。

答案 6 :(得分:-1)

值得注意的是,OS有一个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");
    }
}