当我执行以下代码时,我看到输出为:
最后
线程“main”java.lang.NullPointerException中的异常 在ClientTestConcepts.main(ClientTestConcepts.java:9)
谁打印大胆的陈述。
public class ClientTestConcepts {
public static void main(String []args){
try{
throw new NullPointerException();
}
finally{
System.out.println("Finally");
}
}
}
答案 0 :(得分:7)
Java运行时。
它捕获用户代码中未处理的所有异常,并将其打印在错误输出上(默认情况下)。
答案 1 :(得分:3)
每个线程都有一个默认的未捕获异常处理程序,该异常处理程序在异常使其到达堆栈顶部时运行。您正在观察的那个由ThreadGroup.uncaughtException提供:
当此线程组中的线程因未捕获的异常而停止时,由Java虚拟机调用,并且该线程没有安装特定的Thread.UncaughtExceptionHandler。
ThreadGroup的uncaughtException方法执行以下操作:(...)
...包含线程名称的消息(从线程的getName方法返回)和使用Throwable的printStackTrace方法的堆栈回溯打印到标准错误流。
如果您想要其他行为,请为该线程注册未捕获的异常处理程序。