当一个线程由于未捕获异常而退出时,JVM会把这个事件报告给应用程序提供的UncaughtExceptionHandler异常处理器。如果没有提供任何异常处理器,那么默认的行为是将栈追踪信息输出到System.err.
例子
public static void main(String[] args) {
new Thread(new Runnable() {
public void run() {
int i = 1 / 0;
System.out.println("dddddd");
}
}).start();
上面代码执行时将抛出零除异常,我并没有将它捕获,那么JVM如何处理的呢?
处理流程
进到调用的方法里看看:
可以看到,当JVM遇到未捕获的异常时,首先获取应用程序提供的UncaughtExceptionHandler异常处理器。
如果没提供的话就直接把栈追踪信息输出到System.err;










网友评论