A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhangx 中级黑马   /  2013-4-18 19:43  /  2324 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 zhangx 于 2013-4-19 08:30 编辑

System.out和System.err用哪个好?这两个有什么区别,正常的输出可以用System.err吗?
public class Demo{
        public static void main(String args[]){
                String str = "hello" ;               
                try{
                        System.out.println(Integer.parseInt(str)) ;
                }catch(Exception e){
                        System.err.println(e) ;
                }
        }
};

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

4 个回复

倒序浏览
System.out.   可以重定向到别的地方打印
“标准”输出流。此流已打开并准备接受输出数据。通常,此流对应于显示器输出或者由主机环境或用户指定的另一个输出目标。
对于简单独立的 Java 应用程序,编写一行输出数据的典型方式是:

     System.out.println(data)
请参阅 PrintStream 类中的 println 方法。





System.err     用来打印错误信息

“标准”错误输出流。此流已打开并准备接受输出数据。
通常,此流对应于显示器输出或者由主机环境或用户指定的另一个输出目标。按照惯例,此输出流用于显示错误消息,或者显示那些即使用户输出流(变量 out 的值)已经重定向到通常不被连续监视的某一文件或其他目标,也应该立刻引起用户注意的其他信息。




--------------------------------------------------------------------------------

API里写的很清楚

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
System.err.println一般用来输出错误的信息用的,
输入输出可以重定向,一般来讲System.out会经常被重定向,而System.err则不是经常被重定向
所以输出异常还是用err比较合适
回复 使用道具 举报
1、System.out.println   能重定向到别的输出流,这样的话你在屏幕上将看不到打印的东西了,   
  而System.err.println只能在屏幕上实现打印,即使你重定向了也一样。
System.setOut(new   PrintStream(new   FileOutputStream(new   File( "c:/test.txt "))));
            System.out.println( "haha ");
2、
当向控制台输出信息时,开发者有两个选择: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时都将显示错误信息。
3、System.out.println可能会被缓冲,而System.err.println不会
4、System.err和System.out   就是错误输出和标准输出
如果你用LOG4J记录日志的话,且设定错误等级的话
System.err的输出是将记录到日志中
5、输出设备是一样的   所以你看到的是一样的     
  System.setErr()   System.setOut()   是重定向两个流的方法。   
  以下为Sun   JDK1.5中文文档中的   可能有点泛泛了   
  ------------------------------   
  System.err   
  “标准”错误输出流。此流已打开并准备接受输出数据。   
   
  通常,此流对应于显示器输出或者由主机环境或用户指定的另一个输出目标。按照惯例,此输出流用于显示错误消息,或者显示那些即使用户输出流(变量   out   的值)已经重定向到通常不被连续监视的某一文件或其他目标,也应该立刻引起用户注意的其他信息。     
   
  System.out   
  “标准”输出流。此流已打开并准备接受输出数据。通常,此流对应于显示器输出或者由主机环境或用户指定的另一个输出目标。
6、System.err.println()是要缓冲的,所以优先级会高点,而System.out.println()是不需要缓冲的,所以优先级会低点.
  JVM和操作系统的组合体并不会立即输出这个流。相反,它将保持等待状态直到将要输出的东西达到一定的量。   
  假设输入以下指令:   
  System.out.println("Debugging   Info.");   
  JVM可能同意输出;然而,操作系统可能决定暂不输出。   
回复 使用道具 举报
1、System.out.println   能重定向到别的输出流,这样的话你在屏幕上将看不到打印的东西了,   
  而System.err.println只能在屏幕上实现打印,即使你重定向了也一样。
System.setOut(new   PrintStream(new   FileOutputStream(new   File( "c:/test.txt "))));
            System.out.println( "haha ");
2、
当向控制台输出信息时,开发者有两个选择: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时都将显示错误信息。
3、System.out.println可能会被缓冲,而System.err.println不会
4、System.err和System.out   就是错误输出和标准输出
如果你用LOG4J记录日志的话,且设定错误等级的话
System.err的输出是将记录到日志中
5、输出设备是一样的   所以你看到的是一样的     
  System.setErr()   System.setOut()   是重定向两个流的方法。   
  以下为Sun   JDK1.5中文文档中的   可能有点泛泛了   
  System.err   
  “标准”错误输出流。此流已打开并准备接受输出数据。   
   
  通常,此流对应于显示器输出或者由主机环境或用户指定的另一个输出目标。按照惯例,此输出流用于显示错误消息,或者显示那些即使用户输出流(变量   out   的值)已经重定向到通常不被连续监视的某一文件或其他目标,也应该立刻引起用户注意的其他信息。     
   
  System.out   
  “标准”输出流。此流已打开并准备接受输出数据。通常,此流对应于显示器输出或者由主机环境或用户指定的另一个输出目标。
6、System.err.println()是要缓冲的,所以优先级会高点,而System.out.println()是不需要缓冲的,所以优先级会低点.


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马