Java 异常:捕获异常
语法结构
1.捕获异常语法结构:
红框:使用try{}块来抛出异常
蓝框:使用try{}块来抛出异常
橙框:由于对循环体中的异常进行了捕获处理,所以该行代码可以执行
2.try…catch…finally异常处理结构中,try语句块是必须的, catch和finally语句块至少出现一个。
3.注意:如果try语句块包含的是检查时异常,则在没有通过throws抛出该异常类的情况下,try必须和catch一起使用,当该行代码去掉或注销掉时,catch相应的异常语句块必须去掉,如下代码:
注:由于该行代码抛出检查时异常,所以该行代码去掉或注销掉时,catch相应的异常语句块必须去掉。
多重catch
1.try语句块中的代码可能会引发多种类型的异常,当引发异常时,会按顺序查看每个 catch 语句,并执行第一个与异常类型匹配的catch语句,其后 catch 语句被忽略。
2.在捕获异常的时候,应按照“从小到大”的顺序捕获异常,即先子类后父类。
3.先子类异常,后父类异常:ArrayIndexOutOfBoundsException异常类是RuntimeException的子类,而RuntimeException异常类是Exception的子类,他们的先后顺序不能颠倒。
finally关键字
1.Java异常在try/catch块后加入finally块,可以确保无论是否发生异常 finally块中的代码总能被执行。
红框:无论是否异常,都将执行finally块中语句。即使return也不例外。仅当程序调用System.exit(1)才不执行该块。
final、finally和finalize区别
- final—修饰符(关键字),修饰的类不能被继承,修饰的方法不能被重写,修饰的变量为常量。
- finally—在异常处理时提供 finally 块来执行任何清除操作。
- finalize—方法名,finalize() 方法在垃圾收集器将对象从内存中清除之前做必要的清理工作,如下代码: