Java 异常输出后之前语句才输出的原因是什么?
来源:互联网 发布:mac导入后删除项目 编辑:程序博客网 时间:2024/06/08 13:10
public class Run { public static void main(String[] args) { System.out.println("end"); throw new RuntimeException("end problem"); }}
执行结果为什么会出现异常end problem 在”end“之前输出的情况
作者:RednaxelaFX
链接:https://www.zhihu.com/question/51392452/answer/126663118
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
链接:https://www.zhihu.com/question/51392452/answer/126663118
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
因为Java对stderr和stdout的flush策略不同。
题主的例子里,"end"是在System.out(也就是包装stdout的Java PrintStream对象)上输出的,而"end problem"则是在抛出异常后,由实现了Thread.UncaughtExceptionHandler接口的、main线程所关联的ThreadGroup对象的uncaughtException()方法来捕获异常并向System.err(也就是包装stderr的Java PrintStream对象)输出日志:
ThreadGroup (Java Platform SE 8 )
题主的例子里,"end"是在System.out(也就是包装stdout的Java PrintStream对象)上输出的,而"end problem"则是在抛出异常后,由实现了Thread.UncaughtExceptionHandler接口的、main线程所关联的ThreadGroup对象的uncaughtException()方法来捕获异常并向System.err(也就是包装stderr的Java PrintStream对象)输出日志:
ThreadGroup (Java Platform SE 8 )
- Otherwise, this method determines if the Throwable argument is an instance ofThreadDeath. If so, nothing special is done. Otherwise, a message containing the thread's name, as returned from the thread'sgetName method, and a stack backtrace, using the Throwable's printStackTrace method, is printed to the standard error stream.
所以一个在stdout上输出、一个在stderr上输出,两者之间就不保证有任何顺序关系了,哪个在前面输出都有可能。
题主要是想要保证“end"在"end problem"之前输出的话,可以在throw之前再来个System.out.flush()调用,把stdout里的内容给flush到屏幕上。
或者:写成 System.err.println("end"); 试试
阅读全文
0 0
- Java 异常输出后之前语句才输出的原因是什么?
- Java的对象直接输出到底是什么
- python print输出语句异常
- Java 异常运行输出
- anroid编译后pack无输出的原因
- java异常信息日志输出
- 输出数个月之前的日期(c++)
- Java 控制台输入,输出语句
- 输出异常
- 实现 java 执行 cmd 命令,打印输出,等待cmd 完全执行完成后才执行下面代码
- 实现 java 执行 cmd 命令,打印输出,等待cmd 完全执行完成后才执行下面代码 .
- 输出语句
- 输出语句
- java.lang.NullPointerException异常,没有输出stackTrace的信息
- Java异常打印输出中常见方法的分析
- Java异常打印输出中常见方法的分析
- switch语句的输出问题
- Java 入门 之 数据的输出与选择语句
- linux相关整理
- 使用@PathVariable注解实现动态传值
- Android优化之切换Fragment
- python 中常用的画图工具
- B树、B-树、B+树、B*树
- Java 异常输出后之前语句才输出的原因是什么?
- 微博爬虫“免登录”技巧详解及 Java 实现(业余草的博客)
- pdf转CAD怎么设置输出类型
- http协议
- 经典排序二:选择排序
- Android中Context的内存泄漏
- Python 查看帮助文档 dir(),help()
- angular过滤器 -- 截取字符串
- MySQL空值与非空值