异常处理
2019-04-07 本文已影响0人
Finlay_Li
- 什么是异常
异常的发生不可避免,对于异常产生的结果我们可以正确处理,保证程序的正常运行
比如: 客户输入数据的时候(给出提示)
读取文件是否存在(告诉JVM在与不在该如何处理)
网络是否始终保持通畅等等(给出网络异常提示)
一旦发生异常,会在该代码处,生成一个异常对象,以堆栈式抛出,若不处理,程序将终止运行
-
java程序执行分成2部分:编译 运行
我们要处理的是Exception -
异常的体系结构
java.lang.Throwable:是所有错误和异常的父类
- |--Error
错误,一些严重的错误。如:内存溢出,系统错误等。我们在代码中
不做处理 - |--Exception
异常,我们尽可能预知并处理的异常。
|--编译时异常(受检异常 checked) : 编译时检查,编译不能通过。
|--运行时异常(非受检异常 unchecked): 编译时未检出异常,但运行时一旦发生该异常,会在异常代码处生成一个异常对象
,以堆栈式抛出
- 怎么处理异常
异常的处理:Java中异常的处理采用的是抓抛模型
- “抓”:将上述抛出的异常对象进行捕获处理,如何抓?①try..catch. ②throws
- “抛”:一旦某句代码发生异常,不论什么异常,会在该代码处生成一个异常对象,然后抛出。
- 抓
try{
//可能发生异常的语句
//同一个功能的语句
}catch(异常的类型 变量名){
//异常的处理
} finally{
//可选的,一定被执行的语句
}
注意:
①catch 块可以有多个,由从上往下执行,一旦某个 catch 异常类型匹配成功,其他 catch 块将不再执行
②若 catch 块中的异常类型具有子父类关系,必须"子上父下",否则毫无意义。
③try-catch-finally 是可以嵌套的
④finally 可选的,一旦写上一定被执行,并优先于return执行。因为return结束方法,而finally一定要执行所以优先
6.抓
-
throws 关键字
当不知道该如何处理时,把异常对象往上抛出,交给调用者做具体的处理,若调用者也不知道,又接着抛到main
再抛就是JVM了,但是一直抛这个异常还是存在,必须在main使用期间try..catch处理完 -
格式
public void show() throws FileNotFoundException, IOException{}
- 两种处理方式的区别
try..catch..根本处理异常
throws 间接处理异常
- 抛
-
throw 关键字
制造异常对象,使用在方法体内,后面跟异常对象。 -
制造运行时异常
public int div(int a, int b){
if(b == 0){
throw new RuntimeException("除数不能为零!");
}
return a / b;
}
- 制造编译时异常
public int div(int a, int b) throws ArithmeticException{
if(b == 0){
throw new Exception("除数不能为零!");
}
return a / b;
}
-
【面试题】throw 和 throws 区别
throws 是异常处理的一种方式,交给调用者做具体的处理
throw 制造异常,手动制造可控的描述信息异常,再抛出 -
自定义异常
public class MyException extends RuntimeException{
private static final long serialVersionUID = -7736287090372348682L;
public MyException(){
}
public MyException(String message){
super(message);
}
}