Java中的异常处理机制

Java中的异常处理机制

最近在整理以前的笔记,所以整理了一下发到博客上希望各位大佬能指出我的不足

一、什么是异常

异常就是在程序运行期间由于程序的一些错误或者一些外部环境影响发生的错误

二、异常的分类

Java中的异常处理机制
所有的异常都是由Throwable继承而来,Throwable的子类是Java处理异常的两个重要的类:Error和Exception

  • Error:描述的是Java运行时系统的内部错误和资源耗尽的错误
  • Exception:可以分为由程序错误导致的异常RuntimeException和程序本身没 有问题但是因为像I/O错误这类问题导致的异常的其他异常

从另一个角度来看异常还可以分为checkException(受检查异常)和UncheckException(不受检查异常)

  • checkException:编译器会帮忙检查,所以必须被try{}catch语句块所捕获,或者通过throws声明抛出,如果不进行处理会报错(除了RuntimeException及其子类和Error类及其子类外的所有异常)
  • UncheckException:编译器不强制要求处理的异常(派生于RuntimeException类和Error类的所以异常)

三、捕获和抛出异常

捕获异常使用try{}catch{}finally{}代码块捕获异常
其中try内存放可能产生异常的代码块,而catch和finally两个必须存在一个(可以只有一个也可以都存在),catch块可以有多个每一个catch块都指定一个异常类及其子类的异常实例。当try{}中语句产生异常后,try{}其抛出到JVM运行环境中,运行环境接收到该异常后会判断该异常由哪个catch块处理。当未找到可以处理该异常的catch块时,程序运行终止,系统抛出异常。而finally在代码块最后执行,且一定会执行,如果try或catch里面有抛出异常或return语句,则会在执行完finally里面的代码后在执行,若finally里面有return语句则不会再返回去try和catch了(除非前面的代码使用了System.out退出的程序【代码层面】 )。

抛出异常的方法throws和throw

  • throws:一般用在方法,指定方法可能抛出的异常,如果异常有多个使用,隔开,遵循谁调用谁处理,当用throws时,会把异常抛给调用它位置处理
  • throw:一般用在方法体内或用来抛出用户自定义异常