Java异常

基类 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类

调用方法与系统一致

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 通俗编程——白话JAVA异常机制 - 代码之道,编程之法 - 博客频道 - CSDN.NEThttp://blog...
    葡萄喃喃呓语阅读 8,461评论 0 25
  • 异常处理机制 异常处理模型:终止模型:当异常发生时,就进入异常处理程序,处理结束并不返回异常发生位置继续执行;恢复...
    LilacZiyun阅读 3,355评论 0 2
  • 初识异常(Exception) 比如我们在取数组里面的某个值得时候,经常会出现定义的取值范围超过了数组的大小,那么...
    iDaniel阅读 5,867评论 1 2
  • 概念介绍 异常是发生在程序执行过程中阻碍程序正常执行的错误事件,当一个程序出现错误时,可能的情况有如下3种: 语法...
    niaoge2016阅读 10,734评论 2 20
  • Java异常类型 所有异常类型都是Throwable的子类,Throwable把异常分成两个不同分支的子类Erro...
    予别她阅读 4,538评论 0 2

友情链接更多精彩内容