据我所知,out和err属于同一类PrintStream
。任何人都可以告诉我他们的差异......他们是如何改变自己的行为的?
答案 0 :(得分:13)
差别不明显,因为默认情况下,大多数操作系统都会将它们写入控制台(同一文件,控制台也是文件)。但是,您可以System.out
写入文件,System.err
写入控制台(监视器) - 这只是一种情况。
编写一个发出System.out和System.err消息的程序,并尝试:
java MyProgram > out.txt 2> err.txt # On a *NIX.
System.out
消息将转到out.txt,System.err
消息将转到err.txt。要记住的基本要点是将System.out和System.err视为文件的流(它们是什么),而不是在监视器上输出的机制,这就是我认为的初学者。
答案 1 :(得分:3)
他们分别进入系统stdout和stderr流。在大多数操作系统上,这些是不同的,可以发送到不同的地方。例如,如果您的程序的输出要由另一个程序解析,这可能很有用 - 如果需要报告错误,stderr通常会是更好的地方,因为您可能已将其设置为引起人们的注意。 / p>
答案 2 :(得分:2)
他们有相同的行为。但是first(out)是对标准输出流的引用(默认情况下它是一个控制台)。第二个(错误)是对标准错误流的引用(默认情况下它也是一个控制台)。
但如果您愿意,可以更改引用,或者可以为每个引用添加包装器/过滤器。
例如,我的IDE以红色显示err
流的输出。
答案 3 :(得分:0)
System.out将输出发送到标准输出流。 System.err将输出发送到标准错误流。 默认情况下,这两个都写入控制台。
然而,好处是可以重定向两个流,因此您可以将system.out输出重定向到正常的日志文件,并且可以将System.err输出重定向到错误日志。