您的位置:首页 > 编程语言 > Java开发

Java基础——System.out.print与System.err.print区别

2019-02-12 15:40 337 查看
版权声明:【版权所有 翻版必究】博客千万条 版权第一条 转载不规范 侵权两行泪 https://blog.csdn.net/qq_32730819/article/details/87075464

 2019春节假期后开工,首先祝各位猪年大吉、诸事顺利、心想事成!开始想写一个DEMO练练手,想了想写个冒泡排序吧。代码基本OK,发现一个与自己预想不一致的一个问题,整理一下原因。

[code]package algorithm;

import java.sql.Array;

/**
* 冒泡排序算法
*
* @author XUQIANG_DUAN
* @date 2019/2/12
* @time 9:39
*/
public class BubbleSort {

/**
* 打印数组信息
* @param state //状态:排序前/后
* @param array
*/
public static synchronized void print(String state, Integer[] array){
System.err.print(state+"数组为:");
for(int i = 0; i < array.length; i++){
System.out.print(array[i]+" ");
}
System.out.println();
}

/**
* 冒泡排序方法
* @param array
* @return
*/
public static synchronized Integer[] bubbleSort(Integer[] array) {
BubbleSort.print("排序前", array);
for (int i = 0; i < array.length - 1; i++) {
for (int j = i + 1; j < array.length; j++) {
//前大于后,交换
if(array[i] > array[j]){
array[i] = array[i] + array[j];
array[j] = array[i] - array[j];
array[i] = array[i] - array[j];
}
}
}
BubbleSort.print("排序后", array);
return array;
}

public static void main(String[] args){
Integer[] array = {111,23,44,55,77,99,0,3,897};
BubbleSort.bubbleSort(array);
}

}

输出结果如下:

[code]//输出结果如下:

排序前数组为:111 23 44 55 77 99 0 3 897
排序后数组为:0 3 23 44 55 77 99 111 897

为了强调输出语句中的状态信息(使用红色输出),将 System.out.print(state+"数组为:"); 更为 System.err.print(state+"数组为:");  结果就有点凌乱了,如下图:

随后单独测试System.out与System.err寻找原因,具体细节如下:

[code]    public static void main(String[] args){

System.err.println("E1 This is err!");
System.out.println("O1 This is out!");

System.err.println("E2 This is err!");
System.out.println("O2 This is out!");

System.err.println("E3 This is err!");
System.out.println("O3 This is out!");

}

//第一次运行结果:
E1 This is err!
O1 This is out!
O2 This is out!
E2 This is err!
O3 This is out!
E3 This is err!

//第二次运行结果:
O1 This is out!
E1 This is err!
O2 This is out!
E2 This is err!
O3 This is out!
E3 This is err!

public static void main(String[] args){

System.out.println("O1 This is out!");
System.err.println("E1 This is err!");

System.out.println("O2 This is out!");
System.err.println("E2 This is err!");

System.out.println("O3 This is out!");
System.err.println("E3 This is err!");

}

//又一次运行结果
O1 This is out!
E1 This is err!
O2 This is out!
E2 This is err!
O3 This is out!
E3 This is err!

//再一次运行结果
O1 This is out!
O2 This is out!
O3 This is out!
E1 This is err!
E2 This is err!
E3 This is err!

为什么呢?System.out与System.err具体的区别是?整理一下,仅供参考。

名称 用途 输出显色颜色 缓存功能 log4j日志记录
System.out 标准输出 黑色字体 缓存
System.err 标准错误输出 红色字体 实时 不会

备注:System.out和System.err都能重定向到别的输出流中输出,此时控制台console区域不输出内容。

[code]public static void main(String[] args) throws Exception {

System.setOut(new PrintStream(new FileOutputStream(new File("C:/Users/xuqiang_duan/Desktop/out.log"))));
System.setErr(new PrintStream(new FileOutputStream(new File("C:/Users/xuqiang_duan/Desktop/err.log"))));

System.out.println("O1 This is out!");
System.err.println("E1 This is err!");

System.out.println("O2 This is out!");
System.err.println("E2 This is err!");

System.out.println("O3 This is out!");
System.err.println("E3 This is err!");

}

PS:以上内容为个人理解(其中代码已全部实测),能力有限请各位多多指教,非常感激!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: