1.什么是异常?
阻止程序正常执行
eg:
int a=10;
int b=0;
int c=a/b;
Exception in thread "main" java.lang.ArithmeticException: / by zero
Object->Throwable:
Error:虚拟机内部发生的错误,我们不能处理;比如:内存溢出。
Exception:需要程序猿处理的异常
受检异常:(编译时检查)eg:SQLException IOException ClassNotFoundException
非受检异常:(运行时检查)RuntimeException:(继承RuntimeException的是运行时异常)
->NullPointException
->ArithmeticException
->ClassCastException
->ArrayIndexOutOfBoundsException
2.try与catch关键字
try:不能单独使用
catch:先子类,后父类,顺序不能颠倒,平级时(都是子类)顺序无所谓,一个一个匹配,匹配成功,则执行语句,然后退出catch,不再匹配。
try {//把有可能发生异常的代码段放入try块中
c=a/b;
} catch (ArithmeticException exception) {//捕获异常,处理异常,使程序可以正常执行。
System.out.println("算术异常,除数为0");
}catch (Exception e) {
System.out.println("发生了异常");
}
finally:异常的统一出口
3.异常处理过程分析
1.一旦发生异常,则虚拟机自动产生一个异常类的实例化对象。
2.存在try,则catch匹配异常,匹配成功则处理异常,失败则退出,系统报告错误。
4.finally关键字
不管是否产生异常,最终都要执行此代码。
***:finally与final的区别?
finally:用来异常处理
final:声明常量,修饰作用
***:既有finally又有return,执行顺序?
public static int div(int a,int b) {
int result=0;
try {
result=a/b;//执行该语句后,遇到return,将return的结果保存,先判断是否有finally,
若有,先执行finally,若finally块里也有return,则直接执行该return语句,结束;
若finally里没有return,则执行之前保存的return;
若没有finally,直接执行return。
return result;
} catch (Exception e) {
e.printStackTrace();
return 0;
}finally{
System.out.println("除法执行结束");
// return -1;
}
}
System.out.println(div(10, 2));//finally没有return,除法执行结束 5
//finally有return,除法执行结束 -1
5.throw与throws关键字
throw在程序中手动抛出一个异常,与throws配套使用
throws:方法中不处理,交给调用处处理。如果没有处理,默认JVM处理。