美文网首页
Java异常

Java异常

作者: LemonCandy | 来源:发表于2016-12-10 14:44 被阅读0次

    基类 Throwable

    两个子类 Exception(异常) 和 Error(错误)

    两者区别:异常程序本身可以处理,错误无法处理

    Exception两大类

    运行时异常:RuntimeException及其子类异常。一般由程序逻辑错误引起。

    Java运行时系统自动抛出,允许应用程序忽略运行异常。

    非运行时异常:RuntimeException以外的异常。语法角度是必须进行处理的异常。

    Java异常分类

    可查异常:非运行时异常

    正确的程序运行中容易出现的,情理可容的异常状况。

    特点:Java编译器会检查它,必须用try-catch捕获或throws声明

    不可查异常:运行时异常和错误

    编译器不要求强制处理

    Java处理异常机制

    异常总是先被抛出,后被捕捉

    抛出异常:当一个方法出现错误引发异常时,方法创建对象并交付运行时系统。

    异常对象中包含了异常类型和异常出现时的程序状态等异常信息。运行时系统负责寻找处置异常的代码并执行。

    throws 一个方法可能出现异常,无能力处理,可在方法声明处用throws子句来声明

    多个异常用逗号分隔method() throws Exception1,Exception2,Exception3…

    仅当抛出了异常,该方法的调用者才必须处理或重新抛出该异常。当方法调用者无力处理该异常时,应当继续抛出。

    throw 总是出现在函数体中,用来抛出一个Throwable型的异常。

    程序会在throw语句后立即终止,后在包含它的所有try块中从里向外寻找含有与其匹配的catch子句的try块。

    如果抛出了检查异常,还应在方法头部声明声明方法可能抛出的异常类型。方法调用者也必须检查处理抛出的异常。

    若所有方法都层层上抛异常,最终jvm会处理。

    捕获异常:在方法抛出异常之后,运行时系统转为寻找合适的异常处理器。

    潜在的异常处理器是异常发生时依次存留在调用栈中的方法的集合。当异常处理器所能处理的异常类型与抛出的异常类型相符时,即为合适的异常处理器。

    运行时系统从发生异常的方法开始,依次回查调用栈中的方法,若找到合适异常处理器则执行,否则运行时系统终止。Java程序终止。

    try-catch-finally

    捕获try块内运行语句的异常

    若无异常,try块内语句逐一执行,跳过catch语句块,执行finally语句块和其后的语句

    若有异常,catch语句块无处理此异常的情况,此异常将抛给JVM处理,finally语句块里的语句仍会被执行,但finally语句块后语句不执行 catch语句块有处理此异常的情况,则跳到该catch语句块执行,其余catch块不执行,完毕后执行finally语句块

    注意:

    try或catch块中遇到return语句也会执行finally

    对catch块的检查是顺声明顺序依次检查,若有某个子类异常需要处理,应放在父类异常之前

    finally不执行情况:

    JVM过早终止(调用System.exit())

    finally块中抛出一个未处理的异常

    程序所在线程死亡

    关闭CPU

    自定义异常

    继承Exception类

    调用方法与系统一致

    相关文章

      网友评论

          本文标题:Java异常

          本文链接:https://www.haomeiwen.com/subject/vofumttx.html