内容来自 《Java 程序员面试笔试通关宝典》
在Java应用程序中,异常处理机制分为抛出异常和捕获异常。
当一个方法出现错误引发异常时,方法创建异常对象并交付运行时系统,异常对象中包含了异常类型和异常出现时的程序状态等异常信息。运行时系统负责寻找处置异常的代码并执行。
在方法抛出异常之后,运行时系统将转为寻找合适的异常处理器(exception handler)。潜在的异常处理器是异常发生时依次存留在调用栈中的方法的集合。当异常处理器所能处理的异常类型与方法抛出的异常类型相符时,即为合适的异常处理器。运行时系统从发生异常的方法开始,依次开始往回查找调用栈中的方法,直至找到含有合适异常处理器的方法并执行。当运行时系统遍历调用栈而未找到合适的异常处理器时,运行时系统终止。同时,意味着Java程序的终止。
对于运行时异常、错误或可查异常,Java技术所要求的异常处理方式有所不同。
(1)由于运行时异常的不可查性,为了更合理、更容易地实现应用程序,Java规定:运行时异常由Java运行时系统自动抛出,允许应用程序忽略运行时异常。
(2)对于方法运行中可能出现的Error,当运行方法不欲捕获时,Java允许该方法不做任何抛出声明。因为大多数Error异常属于永远不能被允许发生的状况,也属于合理的应用程序不该捕获的异常。
(3)对于所有的可查异常,Java 规定:一个方法必须捕获,或者声明抛出方法之外。也就是说,当一个方法选择不捕获可查异常时,它必须声明将抛出异常。