1 异常机制关键字
Java异常机制主要依赖于try、catch、finally、throws与throw五个关键字。
- try关键字后紧跟一个花括号括起来(花括号不可省略),简称try块,它里面放置可能引起异常的代码。
- catch后对应一个异常类型和一个代码块,用于表明该catch块用于处理这种类型的代码块。
- finally块在多个catch块后,finally块用于回收try块里的物理资源,异常机制会保证finally块总被执行。
- throws关键字主要在方法签名中使用,用于声明该方法可能抛出异常。
- throw可以单独作为语句使用,抛出一个具体的异常对象。
2 Checked异常和Runtime异常的区别
Java将异常分为两类:Checked异常和Runtime异常,Java异常认为Checked异常都是可以在编译阶段被处理的异常,所以它强制程序处理所有的Checked异常,而Runtime异常则无需处理。
3 Java异常捕获流程示意图
- 当Java运行时环境收到异常对象时,会依次判断该异常对象是否是catch块后异常类或子类的实例,如果是,Java运行环境将调用该catch块来处理异常;否则再拿该异常和下一个catch块里的异常进行比较
- 当程序进入负责异常处理的catch块时,系统生成的异常对象ex将会传给catch块后的异常形参,从而允许catch块通过该对象来获得异常详细信息。
- try块后可以有多个catch块,这是为了针对不同的异常类提供不同异常处理方式,当系统发生不同的意外情况,系统会生成不同的异常对象,Java运行时会根据该异常所属的异常类来决定使用哪个catch块来处理该异常。
- 在通常情况下,如果try块被执行一次,则try块后只有一个catch块会被执行,绝不可能有多个catch块执行。除非在循环中使用了continue开始下一次循环,下一次又重新运行了try块,这才可能导致多个catch块被执行