gpt4 book ai didi

java - Eclipse (Java) 中的控制台未按正确/时间顺序输出内容

转载 作者:行者123 更新时间:2023-11-30 07:23:12 25 4
gpt4 key购买 nike

为什么以下测试代码的输出顺序不正确:

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”来运行它(运行配置)

随机输出是:

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

发生这种情况时,我正在摆弄“断言”。我知道代码完全是无稽之谈,但其他设置也可能会发生这种情况。Secondy 控制台作为官方的东西在很多程序中并没有真正使用太多,主要是为了调试。但还是很奇怪。

这是因为 try catch 运行在不同的线程上吗?或者事情发生得如此之快,以至于一件事先于另一件事推出?

我确实注意到添加了 Thread.sleep(1); (需要抛出或捕获)确实让它总是按时间顺序排列,所以...

为什么它不按时间顺序打印代码?

最佳答案

printStackTrace() 打印到错误输出。它在时间顺序上如何与标准一致是不确定的。您可以尝试在 System.out 上调用 flush(),但我不能向您保证结果将如您所愿,除非您专门将堆栈跟踪打印到标准使用其他可用方法之一。

关于java - Eclipse (Java) 中的控制台未按正确/时间顺序输出内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37215720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com