一,异常的概念数据库
程序在运行时,发生了咱们没有预测的结果,它阻止了程序按照咱们预期效果执行jvm
二,怎么保证咱们的程序在发生异常之后 ,代码继续执行?函数
异常处理机制对象
在程序发生异常之后,还能按照咱们事先设定好的逻辑,继续执行后续代码!继承
三,异常的分类和结构图文档
1.全部异常和错误的父类--Throwable编译器
Throwable类是Java异常类型的顶层父类,一个对象只有是Throwable类(直接或间接的)实例,它才是一个异常对象。才能被异常处理机制识别,JDK中内建了一些经常使用的异常类,咱们也能够自定义异常it
2.根据编译器对异常的处理要求,异常分俩类io
2.1运行时异常(RuntimeException):在程序运行期间产生的异常!编译
2.2受查异常(checked Excep):在程序编译期产生的异常!
3 Throwable
3.1 Error //这个错,靠异常处理机制处理不了,通常是代码问题形成的堆栈爆炸等
3.2 Exception
3.2.1 受查异常
3.2.1.1 IOException
3.2.1.2 EOFException
3.2.1.3 ClassNotFoundException
3.2.1.4 FileNotFoundException
3.2.2 RuntimeException
3.2.2.1 ArithmeticException
3.2.2.2 InputMismatchException
3.2.2.3 NullPointException
四,异常处理方式(一):try-catch-finally
1.try的使用
001.try代码块不能单独使用,必须和catch或finally中的一个一块儿使用
002.可能发生异常的代码
003.若是咱们try代码块中不发生异常,有finally的状况下,先执行finally,以后执行finally以后的代码块
若是咱们try代码块发生异常,先去catch中匹配异常,若是匹配成功,执行对应的catch,不然执行finally,而后程序终止
2.catch的使用
001.每个catch代码块都是用于捕获并处理一个特定的异常或者是这个异常的子类!
002.catch(ArithmeticException ex) 定义了异常类型
003.能够同时出现多个,但不能重复
004.多个catch代码块中异常类型书写顺序,必须是 从小到大
005.咱们会从多个catch代码块中找到一个最早匹配的,而后交给这个代码块处理
006.每一个代码块中的变量是独立的,别的代码块不能访问
007.若是每一个代码块都不匹配。先去执行fianlly,以后终止程序
008.若是try中没有发生异常,则全部catch块被忽略
009.jdk1.7的版本中支持多个异常声明在一个catch块中
3.finally的使用
001.不管发生什么,fially都会执行
002.若是try中没有异常,可是有return,这时候会先执行finally以后执行return
003.若是代码中出现System.exit(int status)那么不会执行finally
System.exit(0); 正常退出
System.exit(非0); 非正常退出
004.作一些程序的清理工做,关闭流,释放数据库的链接等
五,异常处理方式(二):throw-throws
1.throw
01.抛出的异常类型能够是Exception或者其子类
02.一条throw语句只能抛出一个异常对象
03.throw只能出如今方法体内
04.对于throw抛出的异常咱们有俩种处理方式
001.try。。。catch。。。finally
002.throws
2.throws
01.throws声明在方法的名称以后
02.throws能够声明多个 ,每一个异常异常之间用逗号隔开
03.throws能够声明异常,表示当前方法能够出现异常,房法的调用者来处理异常
04.若是在主函数中使用throws,则由咱们的jvm处理
六,异常链
用处:例子:连环汽车追尾,如何头车找到尾车
异常链是指将捕获的异常包装进一个新的异常中,新异常中 记录原始异常的信息,并从新抛出异常的处理方式
七,自定义异常
建立继承Exception的类,或继承Exception的子类的类
重写构造,写单个带String,还有带String和异常对象的那个构造
八。异常的使用原则
1.异常只能用于非正常状况
2.为异常提供说明文档
3.尽量避免异常,特别是运行异常
4.保持异常的原子性
5.避免过于庞大的try代码块
6.在catch块中指定具体的异常类型
7.不要在catch块中忽略捕获的异常