【问题标题】:difference between System.out.println() and System.err.println()System.out.println() 和 System.err.println() 之间的区别
【发布时间】:2011-03-10 22:55:43
【问题描述】:

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

【问题讨论】:

    标签: java println system.out system.err


    【解决方案1】:

    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”消息。

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

    【讨论】:

    • 我认为这是最好的答案,因为它解释了流的含义。
    【解决方案2】:

    这个答案很可能对你有帮助,这很容易 System.errSystem.out 都相同 都在 System 类中定义为 PrintStream 类的引用变量 public final static PrintStream out = null;public final static PrintStream err = null;

    表示两者都是参考。 PrintStream 类的变量。 通常System.err用于打印错误信息,增加程序员的可阅读性。

    当我们使用 Redirection 运算符时,两者都会有细微的差别。

    【讨论】:

      【解决方案3】:

      System.out.println("wassup"); 是指当您必须输出与用户给出的正确输入相关的某个结果时,而System.err.println("duh, that's wrong); 是表示提供的输入错误或存在其他错误的参考。

      大多数 IDE 以红色 (System.err.print) 显示此内容。

      【讨论】:

        【解决方案4】:

        值得注意的是,一个操作系统对于 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,操作系统将保持正确的顺序。但是,如果您同时使用这两者,它可以随机选择要在控制台旁边打印的内容。

        即使在这段代码 sn-p 中,您也可以看到有时顺序会混淆:

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

        【讨论】:

        • "一个操作系统有一个队列用于System.errSystem.out。"这是一个非常笼统且不一定准确的陈述。你是根据什么做出这种说法的? [需要引用] 在控制台应用程序(例如 cmdterminal)中,两个流(此答案称它们为“队列”)似乎已合并(因为它们显示在同一个终端模拟器中),但它们是实际上是分开的。有关详细信息,请参阅Difference between stdout, stderr and stdin
        【解决方案5】:

        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

        【讨论】:

          【解决方案6】:

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

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

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

          【讨论】:

          • 另外,System.out 被缓冲,而 System.err 没有
          • 不破坏您的答案,但它通常被称为标准输出和标准错误 (stdout/stderr),而不是标准输出和错误输出。 +1 提前道歉,因为除了那个挑剔之外,你是对的。
          • 你是对的,但是我不能记住正确的名字......使用 C# 显然对我的低级编程技能不利
          【解决方案7】:

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

          java MyApp 2>errors.txt
          

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

          【讨论】:

          • java MyApp 2&gt;errors.txt 什么是2 &gt; 以及它是如何工作的?你能解释一下吗?
          猜你喜欢
          • 2012-05-16
          • 2010-12-25
          • 1970-01-01
          • 2018-12-04
          • 1970-01-01
          • 2014-10-16
          • 2023-02-20
          • 1970-01-01
          相关资源
          最近更新 更多