异常的种类和jvm是如何捕获异常的

异常:
    异常的种类,throwable下面分Exception,Error.
        Exception:程序(开发人员写的程序)可捕获并能处理的异常;
        Error:程序不可捕获。比如说,类定义错误,jvm虚拟机错误。
    
    异常开销大:当发现异常时,虚拟机会访问当前线程的所有栈帧,并记录所在的类名,方法,行号等信息。
    
    jvm是如何捕获异常的:
        方法体里面的代码被编译成字节码文件之后,会有个属性表,属性表记录了各种字节码指令,以及一个异常属性。
        异常属性记录了从哪里到哪里的代码,发了异常,要跳到哪里去处理。from to taget 异常类型。
        finally的代码块,会被复制三分,try区域,catch区域以及没有被catch区域捕获到的异常。
        finnally如果后面还有代码,会有一个goto字节指令,跳转到相应的地方执行。
        
    java7的suppressed异常,以及语法糖。
        try..finally的异常是为了解决使用资源忘了关闭的问题。
        如果catch内抛出了异常会被finally捕获,捕获的是最新的异常,原因的异常会丢失。因此
            1.suppereed允许开发人员将一个异常附于另一个异常之上。
            2.try-with-resources可精简资源关闭,资源类实现AutoCloseable接口。
            3.支持捕获多种异常,异常之间用|分隔开。
           

posted @ 2020-09-10 15:20  小__七  阅读(281)  评论(0)    收藏  举报