Java中的异常

一、异常分类

Java中的异常_第1张图片
异常结构图
  • Error:Error类以及他的子类的实例,代表了JVM本身的错误

  • 运行时异常:除Error和运行时异常。

  • 检查期间异常:表现为实现了RuntimeException的异常。

异常和错误的区别:异常能被程序本身可以处理,错误是无法处理

二、检查期异常和运行时异常的疑问

  • 检查期异常的定义?
    检查期异常要求编译前必须进行处理

  • 检查期异常应该如何处理
    捕获或者抛出,一直可以抛到虚拟机进行处理

  • 运行时异常的定义?
    编译器要求你必须处置的异常

  • 运行时异常应该如何处理?
    1、捕获
    2、继续抛出
    3、不处理

一般我们是不处理的,因为很难判断会出什么问题,而且有些异常也无法运行时处理,比如空指针,需要人手动的去查找。

  • 既然有了RuntimeException来处理错误,那么为什么Java中还存在检查型异常?
    1.存在检查型异常是一个设计上的决定,因为在你请求了不存在的系统资源的时候,一段强壮的程序必须能够优雅的处理这种情况。通过把IOException声明为检查型异常,Java 确保了你能够优雅的对异常进行处理。
    2.可以使用catch或finally来确保数量受限的系统资源(比如文件描述符)在你使用后尽早 得到释放。

理解这样理解两种异常,运行时异常由虚拟机帮捕获并处理了这些异常情况,避免程序终止。而检查期异常时在编译器可以确定的一定要自行处理的异常,虚拟机没有帮我们进行处理。

三、关于finaly的疑问?

  • finally代码块一定会被执行吗?
    在以下4种特殊情况下,finally块不会被执行:
    1.在finally语句块中发生了异常。
    2.在前面的代码中用了System.exit()退出程序。
    3.程序所在的线程死亡。
    4.关闭CPU。

你可能感兴趣的:(Java中的异常)