Java 异常处理

2019.11

Java的异常

从继承关系可知:Throwable是异常体系的根,它继承自Object。Throwable有两个体系:Error和Exception,Error表示严重的错误,程序对此一般无能为力,例如:

  • OutOfMemoryError:内存耗尽
  • NoClassDefFoundError:无法加载某个Class
  • StackOverflowError:栈溢出
    而Exception则是运行时的错误,它可以被捕获并处理。
    某些异常是应用程序逻辑处理的一部分,应该捕获并处理。例如:
  • NumberFormatException:数值类型的格式错误
  • FileNotFoundException:未找到文件
  • SocketException:读取网络失败
    还有一些异常是程序逻辑编写不对造成的,应该修复程序本身。例如:
  • NullPointerException:对某个null的对象调用方法或字段
  • IndexOutOfBoundsException:数组索引越界
    Exception又分为两大类:
  1. RuntimeException以及它的子类;
  2. 非RuntimeException(包括IOException、ReflectiveOperationException等等)
    Java规定:
  • 必须捕获的异常,包括Exception及其子类,但不包括RuntimeException及其子类,这种类型的异常称为Checked Exception。
  • 不需要捕获的异常,包括Error及其子类,RuntimeException及其子类。


throw Eg. Throw new IOException(); Throw 抛出的只能够是可抛出类throwable 或者其子类的实例对象
Throw 抛出对象的两种处理方案 1.通过try..catch — 自己抛出自己处理 2.throw 抛出的对象,在方法声明处抛出异常类型—谁用谁处理,调用者可以自己处理,也可以继续上抛
第一点eg.

Eg.2

异常分类

异常的五个关键字 Try, catch, finally, throw, throws

Try catch finally

Try 产生异常,catch 捕获异常,finally 无论怎样都能显示
-> Java 异常链

相关API:

可以把多层异常 一起打印展示出来

->总结 Try catch finally
Case 1: 如果try内正常执行的话,直接跳转到catch后面

Case 2: 如果try内不正常的话,且异常和 catch里的相匹配,那么进入catch里,
Case 3: 如果try 不正常执行,且异常与catch语句块内无法匹配,程序中断执行

Finally: 无论是否执行catch语句块,都将会执行finally

Try-catch-finally

0 赞 Like

Leave a Reply

Your email address will not be published. Required fields are marked *