java的exception是怎么样实现的好像一只啥都会接的狗狗

java层面,try{ 可能产生异常的语句}catch(要补货的异常类型 e){ 异常处理语句}对于非RuntimeException也非Error的异常类型,要么在方法throws表中声明,要么必须将它们catch掉。这个特性就是被万人诟病的checked_exception。字节码层面,异常抛出由athrow指令控制,将栈顶异常抛出。exception处理由 exception_table控制。exception_table有4个字段start_pc, end_pc, handle_pc, exception_type分别表示捕获异常起始偏移量(inclusive),捕获异常结束偏移量(exclusive),异常处理偏移量,异常类型。要注意,checked_exception只是java需要的,而不是jvm需要的。一个方法即使可能会抛出Throwable,字节码层面也无需设置该方法的throws表。
■网友
Exception可以人为抛出,例如在任何函数中throw new XXException(), 也可以由系统产生,例如除0,或遇到中断。无论何种原因产生,当前线程都将进入异常状态,JVM知道具体异常的原因(也就是知道具体是什么Exception)。首先当前的运行语句会停止,然后开始逐步弹栈,也就是依次地跳出上一层调用的方法,如果上一层的方法有try catch语句捕捉这个异常的话,那么程序会直接跳到catch的语句的第一条,然后正常执行下去。如果弹到main函数还是没有catch到的话,就会终止程序并打印出异常信息。


    推荐阅读