同時(shí)使用了System.out.println與System.err.println()打印輸入內(nèi)容,結(jié)果看到的 內(nèi)容和預(yù)想的不一樣仑性,順序與預(yù)料的不同并不是因?yàn)閑rr和out的區(qū)別導(dǎo)致,而是因?yàn)樗麄兪莾蓚€(gè)流右蹦,由于緩存原因?qū)е螺敵鲰樞虿煌?br>
1诊杆、System.out.println能重定向到別的輸出流歼捐,這樣的話(huà)你在屏幕上將看不到打印的東西了,
而System.err.println只能在屏幕上實(shí)現(xiàn)打印晨汹,即使你重定向了也一樣豹储。
System.setOut(newPrintStream(newFileOutputStream(newFile( "c:/test.txt "))));
System.out.println( "haha ");
2、
當(dāng)向控制臺(tái)輸出信息時(shí)淘这,開(kāi)發(fā)者有兩個(gè)選擇:System.out和System.err剥扣。使用者更傾向于輸出的是System.out,而如果是 System.err則輸出“error”铝穷。盡管這看起來(lái)是顯而易見(jiàn)的钠怯,但很多開(kāi)發(fā)者都不了解為什么出錯(cuò)和調(diào)試時(shí)使用System.err。(如果 你使用err打印出的 字符串曙聂,在eclipse的console會(huì)顯示成紅色的哦晦炊。)當(dāng)輸出一個(gè)流時(shí),JVM和操作系統(tǒng)共同決定何時(shí)輸出這個(gè)流宁脊。也就是說(shuō)刽锤,盡管開(kāi)發(fā)者鍵入了:
System.out.print_
("TestOutput:");
JVM和操作系統(tǒng)的組合體并不會(huì)立即輸出這個(gè)流。相反朦佩,它將保持等待狀態(tài)直到將要輸出的東西達(dá)到一定的量。
假設(shè)輸入以下指令:
System.out.println("DebuggingInfo.");
JVM可能同意輸出庐氮;然而语稠,操作系統(tǒng)可能決定暫不輸出。
由于這個(gè)原因弄砍,在調(diào)試程序時(shí)想要發(fā)現(xiàn)出錯(cuò)的位置就有可能成為問(wèn)題仙畦。考慮以下的程序:
for(inti=0;i<56;i++){
System.out.println(i);
...//containinganerror
}
錯(cuò)誤可能出現(xiàn)在i等于54時(shí)音婶,但是可能JVM在i等于49時(shí)就結(jié)束輸出了慨畸。50到54仍然存在于緩存中,結(jié)果也就丟失了衣式。
使用System.err來(lái)報(bào)告錯(cuò)誤寸士、調(diào)試程序就可以避免這種情況出現(xiàn),它將使每一次操作的結(jié)果都輸出出來(lái)碴卧。例如以下程序:
for(inti=0;i<56;i++){
System.err.println(i);
...//containinganerror
}
在每一次i等于54時(shí)都將顯示錯(cuò)誤信息弱卡。
3、System.out.println可能會(huì)被緩沖,而System.err.println不會(huì)
4住册、System.err和System.out就是錯(cuò)誤輸出和標(biāo)準(zhǔn)輸出
如果你用LOG4J記錄日志的話(huà),且設(shè)定錯(cuò)誤等級(jí)的話(huà)
System.err的輸出是將記錄到日志中
5婶博、輸出設(shè)備是一樣的所以你看到的是一樣的
System.setErr()System.setOut()是重定向兩個(gè)流的方法。
以下為SunJDK1.5中文文檔中的可能有點(diǎn)泛泛了
------------------------------
System.err
“標(biāo)準(zhǔn)”錯(cuò)誤輸出流荧飞。此流已打開(kāi)并準(zhǔn)備接受輸出數(shù)據(jù)凡人。
通常名党,此流對(duì)應(yīng)于顯示器輸出或者由主機(jī)環(huán)境或用戶(hù)指定的另一個(gè)輸出目標(biāo)。按照慣例挠轴,此輸出流用于顯示錯(cuò)誤消息传睹,或者顯示那些即使用戶(hù)輸出流(變量out的值)已經(jīng)重定向到通常不被連續(xù)監(jiān)視的某一文件或其他目標(biāo),也應(yīng)該立刻引起用戶(hù)注意的其他信息忠荞。
System.out
“標(biāo)準(zhǔn)”輸出流蒋歌。此流已打開(kāi)并準(zhǔn)備接受輸出數(shù)據(jù)。通常委煤,此流對(duì)應(yīng)于顯示器輸出或者由主機(jī)環(huán)境或用戶(hù)指定的另一個(gè)輸出目標(biāo)堂油。
6、System.err.println()是要緩沖的,所以?xún)?yōu)先級(jí)會(huì)高點(diǎn),而System.out.println()是不需要緩沖的,所以?xún)?yōu)先級(jí)會(huì)低點(diǎn).