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. CentOS-7部署Docker容器

    为了适应当前容器化的部署方式,故最近也在对docker进行学习.目前的理解是docker服务就像一艘货船,而你的各项服务可以封装在一个个集装箱里,而且在docker里服务的启动非常快,故有必要从基础的 ...

  2. Git 保存和恢复工作进度(stash)

    感谢原文作者:滑稽的命运 原文链接:https://www.jianshu.com/p/1e65e938f93c 作用: 封存工作区与暂存区已经被Git版本控制,但没有提交(Commit)版本库的文件 ...

  3. kindof

    kindof:相当于 __kindof:表示当前类或者它的子类' 类设计历史 id:可以调用任何对象方法,不能进行编译检查 @interface Person : NSObject // xcode5 ...

  4. JAVA变量初始化赋值问题

    感谢大佬:https://www.cnblogs.com/znsongshu/p/6282672.html 在Java中,null值表示引用不指向任何对象.运行过程中系统发现使用了这样一个引用时·可以 ...

  5. jsp include html 乱码问题

    感谢大佬:https://blog.csdn.net/sessionsong/article/details/38778853 在使用<%@ include page=""% ...

  6. getter/setter方法

    1.setter方法 作用:用来设置成员变量,可以在方法里面过滤掉一些不合理的值 命名规范: 必须是对象方法 返回值类型为void 方法名必须以set开头,而且后面跟上成员变量名去掉"_&q ...

  7. CentOS下搭建自动化测试基础框架:Jenkins+Maven+TestNG+ReportNG

    1. 安装JDK 1.1 卸载系统默认已安装的open-jdk rpm -qa|grep java 查出来openjdk相关的应用,把查出来的所有都要通过下面的命令给卸载掉 rpm -e --node ...

  8. Jenkins敏捷开发 自动化构建工具

    一.序言 Jenkins 是一款自动化构建工具,能够基于 Maven 构建后端 Java 项目,也能够基于 nodejs 构建前端 vue 项目,并且有可视化 web 界面. 所谓自动化构建是按照一定 ...

  9. MATLAB 机器人学工具箱(Robotics Toolbox )sl_drivepoint 模型 consecutive zero crossings 问题

    操作环境 工具箱:Robotics Toolbox for MATLAB 版本 10.2.1 作者 Peter Corke MATLAB版本:R2018a 操作系统:win10 问题 sl_drive ...

  10. 安卓手机超频CPU(无修饰CPU控制)

    手机软件内存越占越大,手机硬件配置太低运行太卡.其实可以通过超频cpu提升性能,安卓智能手机cpu怎么超频下面我来演示手机如何超频cpu.   方法/步骤     打开无修饰CPU控制.   设置CP ...