Q:为什么要进行异常处理?
A:为了使希望程序出错后仍然可以继续运行下去。
比如:
public static void main(String[] args) {
String str = "hello";
//str不是数字,会转行出错。
System.out.println(Integer.parseInt(str));
int i = 12;
System.out.println(i);
}
5个关键字:
- try: try代码块中放可能产生异常的代码
- catch: catch代码块中放处理异常的代码
- finally:finally代码块中放一定会被执行的代码
- throw:throw用在代码中手工抛出异常
- throws:throws用在方法的声明部分,表示此方法会抛出异常
Java中的异常体系:

try和catch
代码结构:
try {
//可能产生异常代码
} catch (Exception e) {
//对异常处理代码
}
try后面跟一个代码块,将可能产生异常的代码放在这个代码块里 。catch用来处理异常的代码,catch后的小括号中必须定义一个异常类型的引用,用来接收try块抛出的异常对象。Try代码块产生异常时,异常信息被封装到某个类型的异常对象中,对象被传递给catch后面小括号中定义的异常类型的引用。
-
Try,catch的3种情况:
第1种:try块没有产生异常,try块里的代码执行完毕,不会进catch, 接着执行try,catch后面的其它代码。
图片.png
第2种:try块产生异常,并且产生的异常被正确的捕获到了,直接从产生异常的代码进入catch(产生异常的代码后的其它代码不会执行),catch块里的代码执行完毕后,接着执行try,catch后面的其它代码。

第3种:try块产生异常,并且产生的异常没有被正确的捕获到了,程序执行直接中断,和没有对异常进行处理是一样的。

假如try代码块里的代码可能产生多种异常,此时1个try对应多个catch 执行过程:

将产生的异常跟第1个catch里的异常类型进行比较, 假如异常类型匹配,进入这个catch代码块,catch代码块执行完毕,忽略其它的catch块,接下去执行try,catch块后的其它代码 假如不匹配,与下一个catch进行比较,直到找到匹配的,则进入匹配的catch块,catch代码块执行完毕,忽略其它的catch块,假如都不匹配,程序中断,相当于没有对异常进行处理。
注:当要捕获的多个异常存在父子关系的时候,子类在前,父类在后,否则会产生不可达的代码,编译报错;假如不存在父子关系,无所谓先后。
网友评论