在标准控制台上,无论我们是在System.out
还是System.err
编写,所有内容都以白色打印。在IDE(对我来说Eclipse)中,我们可以在控制台上看到两者的不同颜色输出。即System.out
为黑色,System.err
为红色。
System.err
仅用于IDE吗?因为cmd我们无法区分System.out
和System.err
。两者都以相同的颜色印刷。
答案 0 :(得分:4)
这是两种不同的输出流,可在大多数操作系统中使用。由于终端/命令行环境的设置,您没有对它们进行颜色编码。另一方面,您的IDE为不同的流提供不同的可视化。
如果要为它们着色,请考虑使用ANSI转义序列。
答案 1 :(得分:3)
System.out
转到标准输出流(stdout),System.err
转到标准错误流(stderr)。有关详细信息以及如何控制其去向,请参阅standard streams。 Eclipse只是方便地为您设置颜色代码,以便您可以在一个视图中区分它们。
答案 2 :(得分:3)
System.err是一个PrintStream。 System.err的工作方式与System.out类似 除了它通常只用于 输出错误文本。一些程序 (如Eclipse)将显示输出 System.err用红色文字表示 更明显的是它是错误文本。
来自JLS:
20.18.3 public static PrintStream err;
此变量的初始值为 一个“标准”错误输出流, 已经开放并准备接受 输出数据。通常,这 对应显示输出或 指定另一个输出目的地 由主机环境或用户。通过 约定,使用此输出流 显示错误消息或其他 应该来的信息 即使用户立即注意 主要输出流,值 变量out,已经 重定向到文件或其他 目的地通常不是 不断监测。请注意这一点 字段不是最终的,所以它的值可能是 必要时予以更新。
答案 3 :(得分:3)
这是来自unix世界的遗留物,其中大多数功能都可用作链接的unix命令。一个命令的输出用于提供另一个命令,如:
grep -i 'token' file | mail peter@address.de
管道符号仅重定向stdout(System.out),但不重定向stderr(System.err)。因此,控制台上会显示错误消息,常规输出将转到mail命令。
如果只有一个流,则无法区分它们。
Windows,不依赖于命令行(在Windows Server 2008中已更改!)没有再次发明,只是采用了unix概念并使其在dos命令中可用。只是几乎没有Windows用户通常知道他们有什么好处。
答案 4 :(得分:0)
System.out
和System.err
始终存在于Java中。
根据您的控制台,可能可以让它以不同的颜色显示两个流。
答案 5 :(得分:0)
使用示例:
try {
Class.doSomething(myFile);
} catch (Exception e){
System.err.println("Fatal error performing doSomething: " + e);
System.exit(-1);
}