1、Java异常的体系结构
Error类:表示仅靠程序本身无法恢复的严重错误,如内存溢出、动态链接失败、虚拟机错误等
Exception类:由Java应用程序抛出和处理的非严重错误,如文件找不到、网络链接不通、数组下表越界等;Exception又分为Checked Exception和RuntimeException
RuntimeException:包括RuntimeException以及其所有子类,不要求程序对他们一定要进行处理(通俗地讲就是编译这关没问题)
CheckedException:处理运行时异常的其他异常,在编译时,要么在方法声明时抛出异常,要么用try-catch语句块处理
2、Java异常处理的五个关键字try catch finally throw throws
try:用于捕捉异常
catch:配合try进行异常处理
finally:不管异常是否发生都要执行的代码块
throw:在方法内部抛出异常,只能抛出一个异常
throws:在方法申明时抛出异常,可以抛出多个异常
以下几点是需要注意的:
1:try是用来配合catch或者finally一起执行的,不能单独使用!(通俗地讲一共3种形式:try-catch或者try-finally或者try-catch-finally)
2:try捕捉异常,如果有异常发生,进入catch模块进行处理,执行finally语句
try捕捉异常,如果有异常没有发生,执行finally语句
try捕捉异常,如果有异常发生,进入catch模块进行处理,如果catch有return,在return前执行执行finally语句
try捕捉异常,如果有异常没有发生且有return,在return前执行执行finally语句
try捕捉异常,如果有异常发生,进入catch模块进行处理,如果catch中调用System.exit(1)退出jvm,不执行finally语句
3:在处理异常时,catch里面的异常要么是正好匹配,要么是异常的父类
4:catch的顺序是,如果是平级顺序无所谓,但子类异常不能在父类异常的后面
3、自定义异常和异常链
自定义异常:继承Exception或者RuntimeExcption,可以根据实际情况对异常处理,增强程序的健壮性
异常链:如果a方法调用b方法,b方法抛出异常,那么a是抛出原有异常还是新的异常,jdk1.4提供了异常链来解决这个问题,虽然创建了新异常,但却保留了原有的异常