何时使用StdErr

当向控制台输出信息时,开发者有两个选择:System.out和System.err。使用者更倾向于输出的是System.out,而如果是System.err则输出“error”。尽管这看起来是显而易见的,但很多开发者都不了解为什么出错和调试时使用System.err。

当输出一个流时,JVM和操作系统共同决定何时输出这个流。也就是说,尽管开发者键入了:

System.out.print_
("Test Output:");

JVM和操作系统的组合体并不会立即输出这个流。相反,它将保持等待状态直到将要输出的东西达到一定的量。


假设输入以下指令:

System.out.println("Debugging Info.");

JVM可能同意输出;然而,操作系统可能决定暂不输出。

由于这个原因,在调试程序时想要发现出错的位置就有可能成为问题。考虑以下的程序:

for(int i=0; i<56; i++) {
 System.out.println(i);
 ... // containing an error
 }

错误可能出现在i等于54时,但是可能JVM在i等于49时就结束输出了。50到54仍然存在于缓存中,结果也就丢失了。

使用System.err来报告错误、调试程序就可以避免这种情况出现,它将使每一次操作的结果都输出出来。例如以下程序:

for(int i=0; i<56; i++) {
 System.err.println(i);
 ... // containing an error
 }

在每一次i等于54时都将显示错误信息。

 

posted on 2006-10-07 00:38  blue  阅读(384)  评论(0)    收藏  举报

导航