异常有以下几种:
重点几种:
Error(系统错误):描述的是内部系统出现错误;用户什么也干不了;
Exception(异常):描述的是由程序和外部环境引起的错误,这样的错误能被捕获;
RuntimeException(运行时异常):虽然是异常的子类,但是单独挑出来说明;它描述的是程序设计错误,错误的类型转换,数组越界访问,都会由JVM抛出RuntimeException;
RuntimeException的几种举例:
Error是免检异常,它们在运行前,不会被编译器发现;运行过后,JVM会报错,类似OOM这种;
除免检异常(和RunTimeException)外所有的异常全部是必检异常,他们在运行前会被编译器强制引入trycatch语句;
Java处理异常的三个步骤:
1.声明一个异常(注意这里声明异常是用throws,后面跟的是异常类名,而且声明是放在函数体后面)
2.捕获一个异常; try{ }catch{ }catch{ }catch{ }可加多个catch;
3.?抛出一个异常(不一定会用到):当异常处理器无法处理这个异常的时候,或者调用者只是想发现它并不想处理它;
(抛出异常用throw,后面加的是异常对象,往往抛出一个异常是在一个方法体内部);
声明异常:
常把异常的名字放在方法的背后,若有多个异常则用逗号分隔;
捕获异常:
在try语句中写入可能会出问题的语句,运行时若出了问题则往catch走,没出问题则跳过catch;catch语句中放了出现异常时处理异常的逻辑语句;
来看下面一个例子:
蓝色箭头处数组越界,所以会发生运行是异常;由于这个异常是免检异常,所以声明和捕获这里其实都不需要写;
finally语句:
先看个例子:
①.当try中没有出现异常,会执行finally语句和trycatchfinally语句块(简称tcf语句)后面的语句;
②.当try出现了异常,(例如try中statement2异常,statement3不会执行),并被catch捕获,直接跳到相应catch语句中执行语句,finally和tcf后的语句都会执行
③.当try中出现异常,也是照上面一样,而没有被catch捕获,会只执行finally语句;
④当try中出现异常,也是照上面一样,虽然被catch捕获了,但又被抛出,会只执行finally语句;
最后,finally语句无论如何都会执行,就算trycatch语句中有return,finally也会在return前执行,最后在执行return;