Java中catch块内的异常对象是如何创建的?
问题核心原因:catch块的异常变量是用来接收已创建好的异常实例,本身不需要负责创建对象
你可以按下面的逻辑理解:
- 首先,异常对象的创建动作根本不在catch声明的位置,而是发生在异常被抛出的时候:
你示例里int data=50/0;触发算术异常时,JVM会自动帮你执行new ArithmeticException("/ by zero")的实例化逻辑,生成对应的异常对象。 - 其次,
catch(ArithmeticException e)本质是异常接收的形参声明,和普通方法的形参逻辑完全一致:比如你定义方法void print(String str),调用时传print("测试"),你不需要在形参位置new对象,对象是调用方已经创建好传进来的。这里的异常对象就是抛出方(JVM或者手动throw代码)提前创建好,传递给catch块的形参e的。 - 你也可以手动抛出异常验证这个逻辑,比如下面的代码,异常对象就是你自己手动new出来的,catch块的e会直接接收到这个实例:
public static void main(String[] args) { try { // 手动创建异常对象并抛出 throw new ArithmeticException("自定义的算术异常"); } catch (ArithmeticException e) { // 这里的e就是你刚才new出来的对象 System.out.println(e.getMessage()); // 输出:自定义的算术异常 } }
- 你示例里直接打印e能输出异常信息,也刚好证明e是已经实例化的对象,不然会报空指针异常。
内容的提问来源于stack exchange,提问作者sandeep
相关产品推荐
相关产品推荐

