Java中System.out.println()和System.err.println()有什么区别?
在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#显然对我的低级编程技能不利
System.out是"标准输出"(stdout),System.err是"错误输出"(stderr)。与System.in(stdin)一起,它们是Unix模型中的三个标准I / O流。大多数现代编程环境(C,Perl等)都支持此模型。
标准输出流用于打印程序"正常操作"的输出,而错误流用于"错误消息"。它们需要分开-尽管在大多数情况下它们出现在同一控制台上。
假设您有一个简单的程序,在其中输入电话号码,它会打印出拥有该号码的人。如果输入的数字无效,则程序应通知您该错误,但不应以此为答案:如果输入" 999-ABC-4567",程序将显示错误消息"无效的数字" ,这并不意味着有一个名为"无效号码"的人,其号码为999-ABC-4567。因此,它不会在标准输出中输出任何内容,并且在错误输出中会显示消息"无效数字"。
这些命令使用不同的输出流。默认情况下,两种消息都将打印在控制台上,但是例如可以将其中一个或两个重定向到文件。
这会将System.err重定向到errors.txt文件。
-
java MyApp 2>errors.txt什么是2 >及其工作方式?你可以解释吗?
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
这个答案很可能对您有帮助
System.err和System.out都相同,都在System类中定义为PrintStream类的引用变量,如下所示:
public final static PrintStream out = null;
和
public final static PrintStream err = null;
表示两者都是参考。 PrintStream类的变量。
通常System.err用于打印错误消息,这增加了程序员的可重复性。
当我们使用重定向运算符时,两者之间的差别很小。
System.out.println("wassup");是指您必须输出与用户给出的正确输入有关的特定结果,而System.err.println("duh, that's wrong);是指表明所提供的输入错误或存在其他错误的参考。
大多数IDE都将其显示为红色(System.err.print)。
值得注意的是,操作系统对System.err和System.out都有一个队列。考虑以下代码:
1 2 3 4 5 6 7 8
| 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,则操作系统将保持正确的顺序。但是,如果您同时使用这两个选项,它可以随机选择要在控制台旁边打印的内容。
即使在此代码段中,您有时也会看到顺序混乱:
1 2 3 4 5 6
| public class PrintQueue {
public static void main (String[] args ) {
System. out. println("out");
System. err. println("err");
}
} |
-
"操作系统对System.err和System.out都有一个队列。"那是一个非常笼统且不一定准确的陈述。您以什么为依据发表此声明? [需要引用]在控制台应用程序(例如cmd或terminal)中,两个流(此回答称为"队列")似乎都已合并(因为它们显示在同一终端模拟器中),但是它们是实际上是分开的。有关详细信息,请参见stdout,stderr和stdin之间的区别。