异常的基本介绍
异常就是指程序正常执行的过程中出现的不确定事件,它会阻止后续程序的正常执行。 所以为了程序的健壮性,我们需要进行异常处理才行。
java的异常体系分为Error(错误)和Exception(异常)两种。
这两者都继承自Throwable
Error是非常严重的错误,这种错误无法交给java的异常处理机制来处理,error一般与虚拟机相关,比如说内存不足、超出栈的最大深度等。这种错误出现就会导致程序无法继续执行。
Exception是异常,表示问题的程度还在可控范围内,我们可以进行处理。
异常的分类
看资料的时候提到了这四种,应该是用不同的分法将异常分成了两大类。
异常可以分类成运行时异常和编译时异常(非运行时),也可以分类成检查型异常和不可检查异常。
运行时异常这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。
运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。
编译时异常运行时异常以外的异常。在语法角度必须进行处理才能进行编译。
检查型异常在运行过程中出现的可控制的异常,所以必须要进行处理才行。除了RuntimeException及其子类以外,其他的Exception类及其子类都属于可查异常。这种异常的特点是Java编译器会检查它,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获它,要么用throws子句声明抛出它,否则编译不会通过。
不可检查异常 指运行时异常,要避免就要规范编码。
关键字
- try:用于监听,里面存放要执行的代码内容。
- catch:用于捕获try模块中发生的异常
- finally:finally模块总是会最后执行。用于保证try模块中打开的资源会被关闭回收。只有finally块执行完成之后,才会回来执行try或者catch块中的return或者throw语句,如果finally中使用了return或者throw等终止方法的语句,则就不会跳回执行,直接停止。
- throw:用于抛出异常
- throws:声明方法可能抛出的异常。
tyr{}catch{} finall{}结构中,try必须存在,catch和finally至少要有一个存在。
throw和throws的区别
-
throw用于抛出异常,throws用于声明可能会出现的异常
-
throw用于方法体中,throws用于声明方法/方法签名上
-
throw后面跟着的是具体的异常对象,而throws则是在后面跟着异常的类名
-
throw一次只能作用于一个异常,而throws一次可以作用于多个异常(中间用 , 隔开)