System.out.println中文乱码和System.err.println的区别

本帖子已过去太久远了,不再提供回复功能。System.out.println与System.err.println的区别
我的图书馆
System.out.println与System.err.println的区别
我在学习osworkflow时,同时使用了System.out.println与System.err.println()打印输入内容,结果看到的内容和我预想的不一样,每次总是System.out.println会先执行,偶尔有一次执行的顺序和我预想的相同。而当我全部使用System.out.println或System.err.println()打印出内容的执行顺序就是我预想的,所以我就从网上找了一点关于System.out.println与System.err.println的区别,但具体为什么会出现上面的原因,我还是不太理解,如果有高手,请帮忙解答一个他们俩个的区别,我先谢谢了,呵呵.
1、System.out.println & 能重定向到别的输出流,这样的话你在屏幕上将看不到打印的东西了, & & 而System.err.println只能在屏幕上实现打印,即使你重定向了也一样。
Java代码 &
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可能同意输出;然而,操作系统可能决定暂不输出。 & & 由于这个原因,在调试程序时想要发现出错的位置就有可能成为问题。考虑以下的程序:&&&&&&&
Java代码 &
for(int&&&i=0;&&&i&56;&&&i++)&&&{&&& &&
&&&&System.out.println(i);&&& &&
&&&&...&&&//&&&containing&&&an&&&error&&& &&
&& 错误可能出现在i等于54时,但是可能JVM在i等于49时就结束输出了。50到54仍然存在于缓存中,结果也就丢失了。 & & & & 使用System.err来报告错误、调试程序就可以避免这种情况出现,它将使每一次操作的结果都输出出来。例如以下程序:&&&&&&&
Java代码 &
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()是不需要缓冲的,所以优先级会低点.
TA的最新馆藏[转]&[转]&[转]&
喜欢该文的人也喜欢2197人阅读
java编程(6)
很多人在调试程序的时候使用IDE的断点来跟踪很方便,但是之前一直使用的System打印来人肉定位程序,所以控制台输出很重要,
但是往往我们很疑惑什么时候使用System.out.println和System.err.println,从字面的意思来理解的话,一般性的输出用out,错误使用err,但是这似乎
只是字面上的不同,我们还是不清楚到底实质上的区别是什么?
这里我们来理解一下标准输出流System.out.println和标准错误输出流System.err.println
System.out.println & 能重定向到别的输出流,比如输出到txt文本中;
而System.err.println只能在屏幕上实现打印,即便重定向也一样。
System.out.println有可能在缓存中,由OS和JVM决定是否输出,而System.err.println它将每一次操作的结果都输出来,这样就很好理解区别了吧。
在eclipse控制台输出时,System.err.println输出的内容是红色的。
对于我们而言在调试程序的时候尽量使用err来输出,这样可以很清晰的定位到任何一个步骤,而out输出的位置顺序很可能和你期望的不一样。
比如import java.io.F
public class Test1 {
public static void main(String args[]){
String path=System.getProperty(&user.dir&) + File.separator
+ &webroot&;
System.out.println(path);
String str=&hello&;
StringBuffer strBuf=new StringBuffer(str);
System.out.println(&aaaaaaaaaaaaaa&);
System.err.println(&bbbbbbbbbbbbbb&);
每次的输出结果可能不一样:
E:\postgraduate\eclipse-jee-juno-SR2-win32-x86_64\workspace\Test\webroot
aaaaaaaaaaaaaa
bbbbbbbbbbbbbb(红色)
bbbbbbbbbbbbbb
E:\postgraduate\eclipse-jee-juno-SR2-win32-x86_64\workspace\Test\webroot
aaaaaaaaaaaaaa
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:17968次
排名:千里之外
原创:33篇
(1)(3)(2)(2)(3)(9)(4)(1)(11)(4)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'用户名:sunyqlinux
评论数:13
访问量:77931
注册日期:
阅读量:1297
阅读量:3317
阅读量:458872
阅读量:1143448
[匿名]simsilver:
51CTO推荐博文
&&&&&&& 学习java已经有一段时间了,这段时间里感觉到了java的博大精深,同时也是产生了不少的疑惑。
&&&&&&& 学习java的时候产生的第一个疑惑是关于System.out.println()的,自己不知道这个方法究竟可以输出什么类型的数据。我试过每一种基本数据类型,发现都可以输出。后来有一次在学习数组的时候老师介绍了一种逐个打印出数组元素的方法,是采用了循环的方法;当时心里就想:为什么不直接用System.out.println()打印出来呢?课后自己试了一下:
& int[] bb = {1,2,3,4,5};&&System.out.println (bb);
在一个main方法中实现这两条语句后得到的结果是:
[I@1fb8ee3
心里很不明白为什么是这个结果,当时也看不懂这个结果,以为这是个乱码。
后来我看了API的帮助文档中关于System类的介绍,其中有:
&&&&&&&&&&“标准”输出流。
以下是关于System.out的详细介绍:
outpublic static final
“标准”输出流。此流已打开并准备接受输出数据。通常,此流对应于显示器输出或者由主机环境或用户指定的另一个输出目标。
对于简单独立的 Java 应用程序,编写一行输出数据的典型方式是:
System.out.println(data)
请参阅 PrintStream 类中的 println 方法。
于是又找到文档中关于PrintStream 的介绍,其中有这么一句
(&x) &&&&&&&&&&打印 Object,然后终止该行。
详细介绍是:
printlnpublic void println(&x)
打印 Object,然后终止该行。此方法的行为就像先调用
x - 要打印的 Object。
看来System.out.println()是可以直接打印对象类型的,但是自己在打印int[] bb时得到的却不是数组的元素呢........
记得老师还说过一个toString()方法,可以返回对象的字符串表示形式,在Object类的介绍中又看到这样一条:
toStringpublic
toString()
返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂。建议所有子类都重写此方法。
Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:
getClass().getName() + '@' + Integer.toHexString(hashCode())
该对象的字符串表示形式。
难道将一个对象作为System.out.println()的参数时输出
的结果就是跟这个方法有关?
另外在类 PrintStream中还看到这样一个方法:
(char[]&x) &&&&&&&&&&打印字符数组,然后终止该行。
System.out.println()可以直接打印字符数组?& char[] charArray={'a','b','c','d','e'};&&System.out.println (charArray);
试了一下果然可以直接输出!
了这篇文章
类别:未分类┆阅读(0)┆评论(0)
20:26:57 22:47:06 22:03:52 09:55:58博客分类:
今天遇到个小问题,之前都没注意,现在mark一下。
java中一般打印方法为System.out.println("");如果程序没问题,要打印的内容会在控制台显示。
但在Android平台,调用System.out.println("")函数,即使程序正确,也不会在控制台显示。不过可以在LogCat中查看。Android自身提供的打印方法是Log.v,引入android.util.Log 即可使用。查看打印的字符也不在console面板,而在Log面板上,可以选择ide右上角debug模式,查看Log面板。
浏览 16498
浏览: 111950 次
来自: 浙江
yaqing503 写道您好!我按照您给的步骤完成了环境的配置 ...
/adminhttp ...
sjsmilelife 写道imread读取不了sdcard
imread读取不了sdcard 的图片,已经加权限了还是不行 ...
yaqing503 写道您好!我按照您给的步骤完成了环境的配置 ...

我要回帖

更多关于 system.err.println 的文章

 

随机推荐