java默认异常处理程序的工作原理
当我们试着运行下面的程序时,我们得到的错误是Exception in thread "main" java.lang.ArithmeticException: / by zero
class excp {
public static void main(String args[]) {
int x = 0;
int a = 30/x;
}
}
但是当我们问某人这些是如何工作的,他告诉我这个异常是默认异常处理程序的cautch,所以我无法理解这个defualt异常处理程序是如何工作的。 请详细说明
# 1 楼答案
引用JLS 11:
30/x-违反Java语言的语义约束-因此将发生异常
终止前-未捕获异常按照以下规则处理:
就你而言:
在异常之后,它进入线程类
然后,根据规则2,它转到ThreadGroup UncaughtheException-因为没有定义exceptionHandler,所以它转到Else if-并且线程被终止
# 2 楼答案
每当在方法内部发生异常时,该方法都会创建一个称为异常对象的对象,并将其交给运行时系统(JVM)。exception对象包含异常类名、异常描述和堆栈跟踪(发生异常的程序的位置)
运行时系统从发生异常的方法开始搜索,并按照调用方法的相反顺序通过调用堆栈进行搜索。如果找到合适的处理程序,则将发生的异常传递给它。如果运行时系统搜索调用堆栈上的所有方法,但找不到适当的处理程序,则运行时系统将异常对象移交给默认异常处理程序,该异常处理程序是运行时系统的一部分。此处理程序打印异常类名、异常描述和堆栈跟踪,并异常终止程序