Java 中 System.out.println() 和 System.err.println() 的区别

2025 年 1 月 7 日 | 阅读 3 分钟

如果我们使用的是简单的 Java 控制台应用程序,两者的输出将是相同的,但我们可以重新配置流,例如,让 System.out 打印到控制台,而 System.err 写入文件。在本节中,我们将讨论 Java 中 System.out.println() 和 System.err.println() 之间的区别。

1. 目的

  • System.out.println(): 用于打印一般性输出,例如程序结果或给用户的消息。
  • System.err.println(): 用于打印错误消息或诊断信息。

2. 输出流

  • System.out.println(): 打印到标准输出流 (stdout)。
  • System.err.println(): 打印到标准错误流 (stderr)。

3. 重定向

  • System.out.println(): 可以使用标准重定向技术将输出重定向到文件或其他进程。
  • System.err.println(): 输出也可以被重定向,但它通常被单独处理,以确保即使标准输出被重定向,错误消息也可见。

4. 使用场景

  • System.out.println(): 用于显示属于正常程序流程的信息。
  • System.err.println(): 用于报告需要关注的问题、异常或警告。

System.out.println() 与 System.err.println()

特性System.out.println()System.err.println()
目的一般输出错误和调试输出
流类型标准输出流标准错误流
用途用于常规程序输出用于打印错误消息和诊断信息
默认目的地ConsoleConsole
重定向可以与 System.err 分开重定向可以与 System.out 分开重定向
缓冲默认缓冲默认不缓冲
输出区分不太适合区分错误消息适合区分错误消息
典型用例显示常规程序输出,如结果、日志打印堆栈跟踪、错误消息、警告
Code ExampleSystem.out.println("Hello, World!");System.err.println("发生错误!");
性能影响由于缓冲,影响很小可能略有性能影响

示例

文件名: SystemOutput.java

输出

 
This message is back to the console.
This error message is back to the console.   

error.txt

Output.txt

 
This is a regular message to the file.   

结论

了解 System.out.println() 和 System.err.println() 之间的区别,可以更轻松地编写更可靠、更易于维护的 Java 程序。为了确保错误消息和诊断信息能够轻松地区分于常规程序输出——这是调试和日志记录的关键功能——应该使用 System.err.println()。