异常的处理
1.JVM 的默认处理
把异常的名称,原因,位置等信息输出到控制台,但是程序不能再继续执行了
2.自己处理
- try…catch…finally:自己编写处理代码,后面的程序可以继续执行
- throws:把自己处理不了的在方法上申明,告诉调用者这里有问题
编译期异常和运行期异常的区别
编译期异常:必须要处理,否则编译不通过
运行期异常:可以不处理,也可以处理
throw和throws的区别
throw:
在方法体中,后面跟的是异常对象名,并且只能是一个
throw抛出的是一个异常对象,说明这里肯定有一个异常产生了
throws:
在方法声明上,后面跟的是异常的类名,可以是多个,用逗号隔开
throws是声明方法有异常,是一种可能性,这个异常不一定产生
finally关键字
特点:被finally控制的语句体一定会执行(除非在执行finally之前jvm退出了【 system.exit(0) 】)
作用:用于释放资源,在IO流操作和数据库操作中会见到
final和finally和finalize的区别:
- final:最终的意思,修饰类,类不能被继承;修饰变量,变量是常量(必须初始化且不能被修改);修饰方法,方法不能被重写
- finally:是异常处理的一部分,用于释放资源,一般来说,代码一定会执行
- finalize:是object类的一个方法,用于垃圾回收
如果try里面有return语句,finally的代码还会执行吗?
会执行,并且finally的执行早于return
- 不管是否出现异常,finally块的代码都会执行
- 当try和catch中有return时,finally仍然会执行
- finally是在return后面的表达式运算后执行的【此时并没有返回运算后的值,而是先把要返回的值保存起来,不管finally中的代码,返回的值都不会改变,仍是之前保存的值】,所以函数返回值是在finally执行前确定的
- finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值
Java提供的异常类
Throwable(所有错误与异常的超类):
-
Error:此类错误一般表示代码运行时 JVM 出现问题,非常严重的错误,且该错误是不可恢复的,这种错误会导致程序终止执行,按照Java惯例,我们是不应该实现任何新的Error子类的!
-
Exception:可恢复的异常,是编译器可以捕捉的,包含检查异常和运行时异常
- 检查异常:编译器强制程序去捕获此类型的异常,把异常代码放在try块中,处理代码放在catch块中
- 运行时异常:编译器没有强制对其进行捕获并处理。常见的有:NullPointerException(空指针异常),ArrayIndexOutOfBoundsException(数组越界异常)
常见的 RuntimeException 有哪些?
- ClassCastException(类转换异常)
- IndexOutOfBoundsException(数组越界)
- NullPointerException(空指针)
- ArrayStoreException(数据存储异常,操作数组时类型不一致)
- IO操作的BufferOverflowException异常