首页 > 技术文章 > Java异常分类及处理

codingLiu 2020-04-21 22:04 原文

异常类架构图

Throwable 是Java语言中所有错误或异常的超类。下一层为Error和Exception

错误Error

Error类是指Java运行时系统的内部错误和资源耗尽错误,程序不会跑出该类的对象,如果从出现了这样的错误,会告知用户,然后终止运行。

 

异常Exception

Exception异常有两个分支,一个是RuntimeException运行时错误,一个是CheckException检查异常,编译时异常。

  • RuntimeException:如:NullPointerException、ClassCastException。RuntimeException往往是在Java虚拟机正常运行期间抛出的异常的超类,如果出现RuntimeException一定是开发者的错误
  • CheckException:如IOException、SQLException。一般是外部错误,这种异常发生在编译阶段,Java编译器会强制程序去捕获此类异常,即会要求你把这端可能出现异常的程序进行 try catch。该类异常一般包括以下几个方面:
    • 试图在文件末尾读取数据
    • 试图打开一个错误格式的URL
    • 试图根据给定的字符串查找class对象,而这个字符串表示的类并不存在

遇到异常不进行处理,而是抛给调用者(throw,throws)

抛出异常有三种形式,throw和throws,还有一种是系统自动抛出异常

throw和throws的区别

  • 位置不同,throws用在函数上,后面跟的是异常类,可以跟多个;而throw用在函数内,后面的跟的是异常对象。
  • 功能不同
    • throws用来声明异常,让调用者只知道该功能可能出现问题,可以给出预先的处理方式。throw抛出具体的问题对象,执行到throw,功能已经结束,转到调用者,并将具体的问题对象抛给调用者。也就是说throw语句独立存在时,下面不要定义语句,执行不到。
    • throws表示出现异常的可能性,并不一定发生这些异常。throw则是抛出了异常,执行throw则一定抛出了某种异常对象。
    • 两者都是消极处理方式,只是抛出或可能抛出异常,不作处理,有函数上层调用者处理。

 

推荐阅读