System.in、System.out与System.err

当我们查阅文档可知,out与err都是Java中的输出流,in是“标准”输入流,System.out是“标准”输出流,而System.err是“标准”错误输出流。

输入流

在学习Scanner用户交互时就有用到System.in,来获取用户的输入

Scanner s = new Scanner(System.in);

它的作用是为Scanner对象提供输入源,完成与用户的交互。

输出流

out与err都可以在控制台中作输出

先看一下他们的Demo

public static void main(String[] args) throws InterruptedException{
SimpleDateFormat ss = new SimpleDateFormat("SS");
System.err.println("err"+ss.format(System.currentTimeMillis()));
for (int i = 1; i < 1200; i++) {
System.out.println(ss.format(System.currentTimeMillis()));
if (i % 3 == 0) System.err.println("err"+ss.format(System.currentTimeMillis()));
}
System.err.println("err"+ss.format(System.currentTimeMillis()));
}
/*第一次输出
err939
err940
err940
err940
err940
....
952
952
952
952
952
952
952
952 Process finished with exit code 0
*/ /*第n次输出
335
335
335
335
335
336
336
336
336
...
err335
err335
err335
err336
err336 Process finished with exit code 0
*/

在上次的两次输出会与程序中的顺序位置有所不同,err的输出不是在out前就是在out后,而且err输出的字体是红色的。

这是因为out有缓存机制的,它的输出是由JVM和操作系统共同决定的,这会导致JVM在输出数据时,操作系统不同意在这个时间输出,它将保持等待状态直到将要输出的东西达到一定的量。而err是实时输出

如果我们想反映程序是否正常时,out的输出流可能会成问题。当我们有个程序是反映循环的,在循环到第100次时报错,但程序在输出第89次时就终止了,此时报错的循环层还在缓存中,无法给我们反馈正确的信息。而err输出流则会避免出现这些的问题,因为它是实时输出的,每循环一次就输出一次。

所以,关于输出程序报错或记录日志的,尽量使用err来输出

out与err输出流的更多相关文章

  1. try-catch-finally中的4个大坑,不小心就栽进去了!

    在 Java 语言中 try-catch-finally 看似简单,一副人畜无害的样子,但想要真正的"掌控"它,却并不是一件容易的事.别的不说,咱就拿 fianlly 来说吧,别看 ...

  2. System.out.println与System.err.println的区别(输出顺序!!!)

    System.out.println与System.err.println的区别(输出顺序!!!) 分类:java (208)  (0) System.out.println与System.err.p ...

  3. Java 输入输出流 转载

    转载自:http://blog.csdn.net/hguisu/article/details/7418161 1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所 ...

  4. 浅谈Java的输入输出流(转)

    Java语言的输入输出功能是十分强大而灵活的,美中不足的是看上去输入输出的代码并不是很简洁,因为你往往需要包装许多不同的对象.在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输 ...

  5. Java I/O输入输出流详解

    一.文件的编码               开发时一定要注意项目默认的编码!!!!!!!!               文件操作的时候一定要记得关闭!!!!!!!!        ASCII:美国标准 ...

  6. Java-IO 输入输出流详解

    一.文件的编码               开发时一定要注意项目默认的编码!!!!!!!!               文件操作的时候一定要记得关闭!!!!!!!!        ASCII:美国标准 ...

  7. java输入输出流总结 转载

    一.基本概念 1.1 什么是IO?     IO(Input/Output)是计算机输入/输出的接口.Java中I/O操作主要是指使用Java进行输入,输出操作.     Java所有的I/O机制都是 ...

  8. Java输入输出流(转载)

    转自http://blog.csdn.net/hguisu/article/details/7418161 目录(?)[+] 1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作 ...

  9. Java输入输出流(1)

    1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java全部的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列.Java的I/O流提供了读 ...

随机推荐

  1. 多线程中sleep方法,简单介绍。

    一 是什么? package com.aaa.threaddemo; /* * 多线程中的sleep方法? * sleep 隶属于Thread的方法,顾名思义,让线程睡一会. 1 public sta ...

  2. 「JSOI2018」机器人

    在本题当中为了方便,我们将坐标范围改至 \((0 \sim n - 1, 0 \sim m - 1)\),行走即可视作任意一维在模意义下 \(+1\). 同时,注意到一个位置只能经过一次,则可以令 \ ...

  3. JAVA_HOME环境的配置

    JAVA_HOME环境的配置 有时候可能需要更换Jdk的目录,但是经常修改path的值可能会不小心修改其他的路径,解决方法: 1.  创建一个JAVA_HOME的变量. 2.  JAVA_HOME的值 ...

  4. autorelease注意事项

    1.autorelease使用注意 并不是放到自动释放池代码中,都会自动加入到自动释放池 @autoreleasepool { // 因为没有调用 autorelease 方法,所以对象没有加入到自动 ...

  5. Serializable接口中serialVersionUID字段的作用

    序列化运行时使用一个称为 serialVersionUID 的版本号与每个可序列化类相关联,该序列号在反序列化过程中用于验证序列化对象的发送者和接收者是否为该对象加载了与序列化兼容的类. 如果接收者加 ...

  6. FastJSON解析Json字符串(反序列化为List、Map)

    在日常开发与数据库打交道的时候,常有以Json格式的字符串存储到数据库的情况,当在Java程序中获取到对应的Json格式的String字符串后,如何才能转换为我们想要的数据格式(比如转换成Java中的 ...

  7. mybatis中的#和$的使用规范

    MyBatis 中 #{} 和 ${} 的区别 1.在MyBatis 的映射配置文件中,动态传递参数有两种方式: (1)#{} 占位符 (2)${} 拼接符 2.#{} 和 ${} 的区别 (1) 1 ...

  8. 用Express 创建项目

    1.Node.js Express 框架安装:npm install express --save在当前目录下创建一个node_modules 2.安装必要的中间件npm install body-p ...

  9. Kubernetes:容器资源需求与限制(约束)

    Blog:博客园 个人 A Container is guaranteed to have as much memory as it requests, but is not allowed to u ...

  10. Anacanda 与 jupyter 的使用

    内容概要 爬虫开发环境搭建 Anacanda 开发环境 jupyter jupyter 的基本使用 启动 基本使用 快捷键的使用 内容详细 一.爬虫开发环境搭建 1.Anacanda 开发环境 Ana ...