JAVA异常体系
异常就是指程序在运行时出现错误通知调用者的一种机制,
运行时:已经通过编译得到class文件了,再由JVM执行过程中出现的错误。
异常体系说明:
1)顶层类Throwable派生出两个重要的子类,Error和Exception
2)其中Error指的是JAVA运行时内部错误和资源耗尽错误,这种错误一出现应用程序就会终止。
3)Exception是编写代码时所用的异常类的父类
4)其中Exception有一个子类称为RuntimeException,这里面又派生出很多我们常见的异常类,如NullPointerException(空指针异常),IndexOutOfBoundsException(下标越界)等
异常处理流程
捕获异常的基本语法:
try{
有可能出现异常的语句;
}catch(异常类型 异常对象){
调用栈;
}finally{
异常的出口;
}
说明:try代码块中放的是可能出现异常的代码
catch中放的是出现异常后的处理行为
finally代码块中的代码用于处理善后工作,会在最后执行
catch和finally都可以根据情况选择加或者不加
注意:finally中最好不要出现return语句,因为它执行的时机是在方法返回之前(try或者catch中如果有return会在这个return之前执行finally),如果finally中也存在return语句,那么就会执行finally中的return,从而不会执行到try中原有的return,例如:
public static void main(String[] args){
System.out.println(func());
}
publicb static int func(){
try{
return 10;
}finally{
return 20;
}
}
抛出异常
1)Throw关键字
public static void main(String[] args){
System.out.println(divide(10,0));
}
public static void divide(int x,int y){
if(y==0){
throw new ArithmeticException("抛出除零异常");
}
return x/y;
}
2)Throws关键字
受查异常和非受查异常
Java语言将派生于Error类或者RuntimeException类的所有异常称为非受查异常,所有的其他的异常称为受查异常。 两者之间的差别在于使用受查异常时的合法性要在编译时刻由编译器来检查,所以比非受查异常需要更多的代码来避免编译错误。
如果一段代码可能抛出受查异常,那么必须进行显示处理。
显示处理的方法:
1)使用try caych包裹
2)在方法上加上异常说明,相当于将处理动作交给上级调用者