一.异常的概念:
程序在运行时,发生了我们没有预测的情况,它阻止了程序按照我们预期效果执行!
二.所有异常和错误的父类--(Throwable)
Throwable类是Java异常类型的顶层父类,一个对象只有是Throwable类的()直接或者间接)实例,他才是一个异常对象,才能被异常处理机制识别.JDK中內建了一些常用的异常类,我们 也可以自定义异常.
1.Excetion--异常
(1).运行时异常(RuntimeExction):在程序运行期间产生的异常.
01:ArithmeticException--数学异常
02:InputMismatchException--输入类型不匹配异常
03:NullPointException--空指针异常.
(2).受查异常(checked Excetion):在程序编译期间产生的异常.
01:IOException--.IO异常
02:EOFException--.意外获取文件尾端,获取失败
03:FileNotFoundException--文件不存在异常
04:ClassNotFoundException--类不存在异常.
2.Error--错误
(1):VirtualMachineError.
01:OutOMemoryError
02:StactOverFlowError.
(2):AWTError:
三.try..catch..finally
1.try的使用
(1):try代码块不能单独使用,必须和catch或者finally中的一个一起使用.
(2):可能发生异常的代码.
(3):如果try代码块中不发生异常,有finally的情况下,先执行finally,之后执行finally之后的代码.
如果try代码块中发生异常,先去catch中匹配异常,如果匹配成功,执行对应的catch.
否则执行finally,然后程序终止!!!
2.catch的使用
(1):每一个catch代码块都是用于捕获并处理一个特定的异常或者是这个异常的子类!
(2):catch(ArithmeticException ex)定义了异常类型
(3):可以同时出现多个,但是不能重复
(4):多个catch代码块中的异常类型书写顺序必须是从小到大
(5):我们的异常会从多个catch代码块中找到一个最先匹配的,然后交给这个代码块处理
(6):每个catch代码块中的变量都是独立的,别的代码块不能访问.
(7):如果所有的catch代码块都不匹配,先去执行finally,之后终止程序.
(8):如果try中没有发生异常,则所有的catch块被匹配.
(9):java1.7的版本中支持多个异常声明在一个catch中.
3.finally的使用:
(1):无论发生什么异常,finally都会执行
(2)如果try中没有异常,但是有return,这时候会先执行finally之后执行return.
(3)如果代码中出现System.exit(int status),那么不会执行finally
System,exit(0),正常退出.
System.exit(非0):非正常退出.
(4)做一些程序的清理工作,关闭流,释放数据库的连接.
四:throw throws
1:throw
(1)抛出的异常类型可以是Exception或者其子类!
(2)一条throw语句只能抛出一个异常对象.
(3)throw只能出现在方法体内
(4)对于throw抛出的异常我们有两种处理方式.
01:try..catch..finally
02.throws
2.throws
(1)throws声明在方法的名称之后.
(2)throws可以声明多个,每个异常之间使用逗号隔开,
(3)throws声明异常,表示当前方法可能出现异常,方法的调用者来处理异常
(4)如果在主函数main中舒勇throws,则由我们的jvm来处理
五.异常链.
1什么是异常链?
(1)异常链是指将捕获的异常包装进一个新的异常中,新异常中记录了原始异常的信息,并重新抛出异常处理方式.
六:自定义异常:
1异常类必须是Throwable的子类
2:定义运行异常 继承RuntimeException
3.定义受查异常 继承Exception.
七:异常的使用原则:
1.异常只能用于非正常情况.
2:为异常提供说明文档.
3.尽可能的避免异常,特别是运行时异常
4:保持异常的原子性.
5.避免过于庞大的try代码块.
6:在catch中制定具体的异常类型
7:不要在catch块中忽略捕获的异常.