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

在Java中System.out.println()System.err.println()什么区别?

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

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

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

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

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

假设你有一个简单的程序,你input一个电话号码,并打印出有这个号码的人。 如果你input了一个无效的数字,程序会通知你这个错误,但是不应该这样做:如果你input“999-ABC-4567”并且程序输出错误信息“Not a valid number”这并不意味着有一个人名为“不是有效的号码”,其号码是999-ABC-4567。 所以它不会向标准输出输出任何内容,并且对错误输出“不是有效的数字”。

这些命令使用不同的输出stream。 默认情况下,这两个消息将被打印在控制台上,但是可以将其中一个或两个都redirect到一个文件。

 java MyApp 2>errors.txt 

这会将System.errredirect到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.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,则操作系统将保持正确的顺序。 但它可以随机select要在控制台旁边打印什么,如果使用这两个。

即使在这段代码中,你也可以看到订单有时被混淆了:

 public class PrintQueue { public static void main(String[] args) { System.out.println("out"); System.err.println("err"); } }