文章目录
异常
- 什么是异常
- 能辨别常见异常及其含义
- 理解异常产生的原理
- 能处理异常
- 能自定义异常
什么是异常
异常是在程序中导致程序中断的一种指令流
异常的体系结构
异常指的是Exception,Exception类,在Java中存在一个父类Throwable(可能的抛出)
Throwable存在两个子类
- Error:表示的是错误,是JVM发出的错误操作,只能尽量避免,无法用代码处理
- Exception:一般表示所有程序中的错误,所以一般在程序中进行try-catch处理
- 受检异常:除RuntimeException以外—在编译成.class文件时,JVM自动检查
- 非受检异常:RuntimeException---------代表着,运行时出现的异常,不受JVM的检查
处理异常
如果相对异常进行处理,则必须采用标准的处理格式,处理格式语法如下
try{
//有可能发生异常的代码片段
}catch(异常类型1 异常名){
//异常的处理操作
}catch(异常类型2 异常名){
//异常的处理操作
}
finally{
//必然执行的异常的统一出口
//无论是否发生异常,finally必然执行
//只有程序结束了,finally才不会执行,例如电脑重启QAQ或者System.exit(0);!!!
}
- 一旦产生异常,系统会自动产生一个异常类的实例化对象
- 此时如果异常发生在try语句内,则会自动找到匹配的catch语句执行,如果没有在try语句内,则会将异常抛出
- 所有的catch根据方法的参数,匹配异常的实例化对象,如果匹配成功,则表示由catch进行处理
finally何时执行何时不执行的问题
throws
抛出异常不进行处理
主要是在方法声明上使用,表示方法中不处理异常,交由调用者处理
异常是否抛出:
如果异常是因为传参数导致异常,应该将异常抛出去,将错误抛出以后,如果不进行处理,程序崩溃报错-----RuntimeException
throw
表示在程序中认为的抛出一个异常,因为从异常的处理机制来看,所有异常一旦产生有以后,实际上抛出的就是一个异常类的实例化对象,那么对象也可以由throw直接抛出
try-catch-finally中,如果catch中return了,finally会执行么
finally中的代码会执行
执行流程:
1. 先计算返回值,并将返回值存储起来,等待返回
2. 执行finally代码块
3. 将之前存储的返回值返回出去
需注意:
1. 返回值是在finally运算之前就确定了,并且缓存了,对于基本数据类型,不管finally对该值做任何改变,返回的值都不会改变
2. finally代码中不建议包含return,因为程序会在上述的流程中提前退出,也就是说,返回的值不是try或catch中的值
3. 如果在try或者catch中停止了jvm,则finally不会执行,例如停电,或者通过System.exit(0)退出
或者catch中停止了jvm,则finally不会执行,例如停电,或者通过System.exit(0)退出