测试输出System.err与System.out

1、System.out在JVM和操作系统都具有缓存功能,输出的东西不一定实时输出,可能积累几个字符才会一块输出

2、System.err 不带缓存(默认,可修改),会实时输出,打印的东西可以立马显示在屏幕。
3、如果使用了log4j的日志记录,System.err会被记入日志,System.out不会。
4、JDK的解释是System.out是通常输出信息的方式,System.err是用在显示错误信息或者system.out被重定向以后,需要立即让用户注意到的信息的输出。

注意:单用其中一种都不会出问题,但是如果混用的话(System.err和System.out),就会输出顺序可能不是自己想要的。千万不要小看这个输出顺序问题,当你测试线程的输出顺序或者其他依赖顺序来判断执行过程的时候,这个时候就如果输出乱序的话,可能就会让你放弃某个方案。

如果测试依赖顺序时一定要注意!

附上简单的用例:

public class Test {

    public static void main(String[] args) {
        System.out.println("start...");
        System.err.println("middle...");
        System.out.println("end...");
    }

}

理想输出:

start...
       middle...
       end...

多次测试会出现以下输出:

middle...

start...
       end...

时间: 2024-10-13 17:55:28

测试输出System.err与System.out的相关文章

java基础(System.err和System.out)

今天有位同事在使用System.err和System.out遇上了一些小问题. 看了些资料总结下: 1.JDK文档对两者的解释: out: "标准"输出流.此流已打开并准备接受输出数据.通常,此流对应于显示器输出或者由主机环境或用户指定的另一个输出目标. err: "标准"错误输出流.此流已打开并准备接受输出数据.通常,此流对应于显示器输出或者由主机环境或用户指定的另一个输出目标.按照惯例,此输出流用于显示错误消息,或者显示那些即使用户输出流(变量 out 的值)已

System.err和System.out

System.err和System.out是错误输出和标准输出 System.err.println只能在屏幕上实现打印,err是运行期异常和错误反馈的输出流的方向. 使用err打印出的字符串,在eclipse的console会显示成红色的. System.out.println 能重定向到别的输出流,这样你在屏幕上将看不到打印的东西.System.out.println可能会被缓冲,而System.err.println不会 参考:http://blog.sina.com.cn/s/blog_

System.out.println()和System.err.println()

在一次笔试中遇到了一个System.err.println()的输出,之前没有见过,回来查一查,自己还是见识太短,来补充一下. 首先看一看jdk中 来一个简单的实验 第一次显示 第二次显示 1. 发现并不是顺序输出的,而且err输出不是抢在out之前,就是紧跟在之后,之间的换行没有作用了,这是为什么呢? 顺序与预料的不同并不是因为err和out的区别导致,而是因为他们是两个流,由于缓存原因导致输出顺序不同. 2.System.out.println   能重定向到别的输出流,这样的话你在屏幕上将

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

public class Test2 { static { System.out.println("1"); } { System.out.println("2"); } public Test2() { System.out.println("3"); System.err.println("3"); } public static void main(String[] args) { new Test2(); } } Sy

java 标准输出与标准错误 out与 err 区别 用法 联系 java中的out与err区别 System.out和System.err的区别 System.out.println和System.err.println的区别 Java重定向System.out和System.err

操作系统一般都有三个标准文件描述符:标准输入,标准输出,标准出错 这是操作系统的一种抽象表达 不同的语言需要有不同的具体表达方式,当然也不过是另一种包装抽象 比如c++的  cin cout cerr Java中则是的System.in,System.out,System.err 示例 输出结果: ---------------- ---------------- 可以看得出来: 运行多次  err的打印信息位置是不固定的 看下JDK文档:   /** * The "standard"

Android开发—错误记录1:W/System.err: java.net.ConnectException: Connection refused

W/System.err: java.net.ConnectException: Connection refused 前台访问后台时,出现访问被拒绝情况:W/System.err: java.net.ConnectException: Connection refused 问题出在HttpURLConnection的URL上面,测试三种url"localhost:8008/……""127.0.0.1:8008/……""后台所在的服务器的IP地址IP:80

vs2013c#测试using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1_CXY { class Program { stati

首先安装Unit Test Generator.方法为:工具->扩展和更新->联机->搜索“图标为装有蓝色液体的小试管.Unit Test Generator”, 编写代码,生成一个新的类,编写构造函数 与 add()函数.代码如下. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Co

System.nanoTime与System.currentTimeMillis的区别

平时产生随机数时我们经常拿时间做种子,比如用 System.currentTimeMillis的结果,但是在执行一些循环中使用了System.currentTimeMillis,那么每次的结 果将会差别很小,甚至一样,因为现代的计算机运行速度很快.后来看到java中产生随机数函数以及线程池中的一些函数使用的都是 System.nanoTime,下面说一下这2个方法的具体区别. System.nanoTime提供相对精确的计时,但是不能用他来计算当前日期,在jdk中的说明如下: 返回最准确的可用系

System.nanoTime()和System.currentTimeMillis()性能问题

之前给模块做性能优化的时候,需要将性能调到毫秒级,使用了System.nanoTime()和System.currentTimeMillis()对代码分片计时分析耗时操作,后发现在串行情况下性能达到毫秒级,但是一旦在并发压测的时候,性能急剧下降,后经多方排查,发现原因出在System.nanoTime()和System.currentTimeMillis()这两个api上,其在并发情况下耗时会急剧上升,当然在整体上看依然很快,但是在高性能场景下就有很显著的影响.特此记录一下. 测试代码: 1 p