Java System.out.println()和System.err.println()之间的差异

Java System.out.println()和System.err.println()之间的差异,java,println,system.out,system.err,Java,Println,System.out,System.err,Java中的System.out.println()和System.err.println()之间有什么区别?Java中的System.out.println()将按照您使用的系统的标准输出进行打印。另一方面,System.err.println()将打印到标准错误 如果您使用的是一个简单的Java控制台应用程序,则两个输出将是相同的(命令行或控制台),但您可以重新配置流,例如,System.out仍会打印到控制台,但System.err会写入文件 java MyApp 2>errors.

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

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

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

java MyApp 2>errors.txt

此外,Eclipse等IDE默认以红色文本显示
System.err
,以黑色文本显示
System.out

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

java MyApp 2>errors.txt

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

System.out
的主要目的是提供标准输出

System.err
的主要目的是给出标准错误


看看这些

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

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

假设你有一个简单的程序,输入一个电话号码,然后打印出拥有该号码的人。如果您输入了一个无效的号码,程序应该通知您该错误,但它不应该这样做作为答案:如果您输入“999-ABC-4567”,并且程序打印了一条错误消息“Not a valid number”,这并不意味着有一个名为“Not a valid number”的人的号码是999-ABC-4567。因此,它不向标准输出输出任何内容,而向错误输出输出消息“Not a valid number”


您可以设置执行环境来区分这两个流,例如,将标准输出打印到屏幕,将错误输出打印到文件。

值得注意的是,操作系统对System.err和System.out都有一个队列。考虑下面的代码:

java MyApp 2>errors.txt
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.println(“wassup”)是指当您必须输出与用户提供的正确输入相关的特定结果时,而
System.err.println(“duh,那是错误的);
是指显示提供的输入错误或存在其他错误的参考


大多数IDE都用红色(
System.err.print
)来显示这一点。

这个答案很可能会帮助您,因为它非常简单
System.err
System.out
都是相同的,都在
System
类中定义为
PrintStream
类的参考变量
public final static PrintStream out=null;
public final static PrintStream err=null;

表示两者都是
PrintStream
类的参考变量。 正常情况下,
System.err
用于打印错误消息,这增加了程序员的可编辑性。


当我们使用重定向操作符时,两者都有一个细微的区别。

另外,System.out是缓冲的,System.err不会改变您的答案,但它通常被称为标准out和标准错误(stdout/stderr)而不是标准输出和错误输出。+1作为事先道歉的方式,因为,除了那个吹毛求疵,你是对的。你是对的,但我不能记住正确的名字……使用C显然对我的低级编程技能不利。我认为这是最好的答案,因为它解释了流的含义。
JavaMyApp2>错误s、 txt
什么是
2>
以及它是如何工作的?你能解释一下吗?“一个操作系统对
System.err
System.out
都有一个队列”这是一个非常笼统且不一定准确的陈述。你是基于什么做出这种陈述的?[需要引用]在控制台应用程序中(例如
cmd
terminal
),这两个流(“队列”这个答案称之为它们)看起来是合并的(因为它们显示在同一个终端模拟器中),但实际上是分开的。有关详细信息,请参阅。