前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >System.out.println与System.err.println的区别

System.out.println与System.err.println的区别

作者头像
张张
发布2019-12-26 15:43:36
1.6K0
发布2019-12-26 15:43:36
举报

System.out.println能重定向到别的输出流,这样的话你在屏幕上将看不到打印的东西了, 而System.err.println只能在屏幕上实现打印,即使你重定向了也一样。 当向控制台输出信息时,开发者有两个选择:System.outSystem.err。使用者更倾向于输出的是System.out,而如果是System.err则输出“error”。尽管这看起来是显而易见的,但很多开发者都不了解为什么出错和调试时使用System.err

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

代码语言:javascript
复制
	System.out.print("Test   Output:");

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

假设输入以下指令:

代码语言:javascript
复制
System.out.println("Debugging Info.");

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

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

代码语言:javascript
复制
for(int   i=0;   i<56;   i++)   {   
    System.out.println(i);   
    ...   
    //   containing   an   error   
}

错误可能出现在i等于54时,但是可能JVM在i等于49时就结束输出了。50到54仍然存在于缓存中,结果也就丢失了。使用System.err来报告错误、调试程序就可以避免这种情况出现,它将使每一次操作的结果都输出出来。例如以下程序:

代码语言:javascript
复制
for(int   i=0;   i<56;   i++)   {   
     System.err.println(i);   
     ...   
     //   containing   an   error   
}

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

System.out.println可能会被缓冲,而System.err.println不会.

System.err和System.out就是错误输出和标准输出。如果你用LOG4J记录日志的话,且设定错误等级的话,System.err的输出是将记录到日志中。

输出设备是一样的所以你看到的是一样的System.setErr()System.setOut()是重定向两个流的方法。

System.err.println()是要缓冲的,所以优先级会高点,而System.out.println()是不需要缓冲的,所以优先级会低点.

另外,特别的,当你使用MyEclipse和Tomcat6以上时,输出System.err.println("aaaa")到控制台是红色显示的,在控制台很显眼,一下就能找到,非常适合输出调试信息,这个我个人比较喜欢用,比如:

代码语言:javascript
复制
public static void main(String[] args) {
    System.err.println("aaaaaaaaaaaaaaaa");
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2013-10-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档