1
爲什麼不輸出以正確的順序進行下面的測試代碼:在Eclipse(Java)的控制檯不輸出的東西在正確的/時間順序
public static void main(String[] args) {
boolean test = false;
try {
assert test: "will fail with -ea enabled in VM args" ;
} catch (AssertionError e) {
e.printStackTrace();
System.out.println("idk why you would use this but...");
}
System.out.println(test + " sneaks in between");
}
來看,這種以「-ea」啓用在VM參數(運行配置)
隨機的輸出可以是:
java.lang.AssertionError: will fail with -ea enabled in VM args
at Main.main(Main.java:31)
FOO
BAR
(正常情況)或:
java.lang.AssertionError: ERROR
FOO
BAR
at Main.main(Main.java:31)
(不應發生),有時:
java.lang.AssertionError: ERROR
FOO
at Main.main(Main.java:31)
BAR
我與瞎搞 「斷言」 當發生這種情況。我知道代碼是完全廢話,但它也可能發生在其他設置。Seconldy控制檯在許多程序中並沒有真正用於官方,主要用於調試。但它仍然很奇怪。
這是因爲try catch在不同的線程上運行?還是在彼此之後發生的事情發生得如此之快,以至於有一件事在另一件事之前推出?
我注意到添加一個Thread.sleep(1); (需要拋出或抓住) 的確使它總是按時間順序排列,所以...
爲什麼不按時間順序打印代碼?
是的,當使用e.printStackTrace(System.out)指定PrintStream時,我得到了正確的結果; (除了文本不是紅色的) – AgentM
也我猜:http://stackoverflow.com/questions/6121786/java-synchronizing-standard-out-and-standard-error然後也回答它, (編輯)請注意,我不知道printStackTrace()使用System.err輸出流,我甚至都沒有想過。 – AgentM