【发布时间】:2011-03-10 22:55:43
【问题描述】:
System.out.println() 和 System.err.println() 在 Java 中的区别是什么?
【问题讨论】:
标签: java println system.out system.err
System.out.println() 和 System.err.println() 在 Java 中的区别是什么?
【问题讨论】:
标签: java println 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 都相同 都在 System 类中定义为 PrintStream 类的引用变量
public final static PrintStream out = null;
和
public final static PrintStream err = null;
表示两者都是参考。 PrintStream 类的变量。
通常System.err用于打印错误信息,增加程序员的可阅读性。
当我们使用 Redirection 运算符时,两者都会有细微的差别。
【讨论】:
System.out.println("wassup"); 是指当您必须输出与用户给出的正确输入相关的某个结果时,而System.err.println("duh, that's wrong); 是表示提供的输入错误或存在其他错误的参考。
大多数 IDE 以红色 (System.err.print) 显示此内容。
【讨论】:
值得注意的是,一个操作系统对于 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.err 和System.out。"这是一个非常笼统且不一定准确的陈述。你是根据什么做出这种说法的? [需要引用] 在控制台应用程序(例如 cmd 或 terminal)中,两个流(此答案称它们为“队列”)似乎已合并(因为它们显示在同一个终端模拟器中),但它们是实际上是分开的。有关详细信息,请参阅Difference between stdout, stderr and stdin。
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
【讨论】:
在 Java 中,System.out.println() 将打印到您正在使用的系统之外的标准。另一方面,System.err.println() 将打印到标准错误。
如果您使用的是简单的 Java 控制台应用程序,两个输出将是相同的(命令行或控制台),但您可以重新配置流,例如,System.out 仍会打印到控制台,但 System.err 会写入到一个文件。
此外,Eclipse 等 IDE 默认以红色文本显示 System.err,以黑色文本显示 System.out。
【讨论】:
这些命令使用不同的输出流。默认情况下,这两条消息都将打印在控制台上,但例如可以将其中一条或两条重定向到一个文件。
java MyApp 2>errors.txt
这会将System.err 重定向到errors.txt 文件。
【讨论】:
java MyApp 2>errors.txt 什么是2 > 以及它是如何工作的?你能解释一下吗?