错误: 指的是可以预见的,编译可出现,并可以解决
异常: 指的是可预见的,潜在错误导致,如果不处理程序会执行不了
异常处理:(java提供抓抛模型)
异常中最大的类是Throwable(类)有两个子类:
A:Error (类)由于运行类不存在(不处理)
B:Exception(类)由程序本身抛出的错误
1. 检查时异常
2. 运行时异常(非检查异常):
①NullPointerException(空指针异常)
②ArrayIndexOutOfBoundsException(数组下标越界)
③ClassCastException(转换类型)
④ ArithmeticException(算术异常)
捕获
处理
异常处理方式一
语法
try{
//可能出现异常的代码
}catch(Exception e1){
//处理方式1;
}catch(Exception e2){
//处理方式2;
}finally{//可写可不写,但是finally一旦写了,里面的代码就一定要运行
//一定要执行的代码;
}
注意:
1.try内声明的变量,类似于局部变量,出了try{}语句就不能被调用了。
2.finally是可选的,可写可不写,但是finally一旦写了,里面的代码就一定要运行,一定要执行的代码;
3.catch语句内部是对异常对象的处理;e.getMessage(),是有返回值的; e.printStackTrace();此方法无返回值,就是输出
堆栈信息。
4.可以有多个catch语句,try中抛出的异常类的对象从上往下匹配catch中异常类的类型,一旦满足就执行catch{}中的代
码。执行完后就跳出其后的多条catch语句。
5.如果异常处理了,那么其后的代码继续执行
6.如catch中多个异常是“并列”关系,孰上孰下都可以。若catch中多个异常类型是“包含”关系,需要将子类放到父类的上
面,进行处理,否则编译报错。(也就是说先匹配小的再匹配大的,反之大的匹配到了还要小的做什么)
7.不管try,catch中是否仍有异常为被处理,finally中的代码都会被执行。(这里经常实用于数据库里,不管结果如何,必须释放空间)
8.try-catch是可以被嵌套使用的。
异常处理方式二:
在方法的声明处,显示的抛出该异常对象的类型(使用关键字throws)
例:
public static void method()throws FileNotFoundException,IOException{}
当在此方法内部出现异常的时候,会抛出一个异常类的对象,抛给方法的调用者。异常的对象可以逐层向上抛,直至
main方法中。当然在向上抛的过程中可以再通过try-catch-finally进行处理。
java的异常处理(抓抛模型)
抓:异常的处理,有二种方式:
1) try-catch-finally
2) throws+异常类的对象
抛:一旦执行过程中出现异常,会抛出一个异常类的对象。
自动抛出
手动抛出 语法:throw new 异常();
注意:1. 在方法中手动的抛出异常的类型为RuntimeException,可以不显示的处理。如果是Exception,必需要显示的处理!
2. 异常的处理有5个关键字:try、catch、finally,throw,throws