阿抗

导航

异常

一:定义

  程序在运行期间,发生的不可预测的事件,他阻止了我们的程序正常运行;

二:异常处理机制

  在我们程序发生异常以后,代码能够按照我们实现设计的顺序继续执行;

  处理方式分为两种:

    01.在方法体内使用try{}catch{}finally{}代码处理;

    02.在方法体内throw抛出异常,在方法参数列表后面用throws声明异常;

三:异常的分类:

  01.运行时异常  都是 RuntimeException 类的子类,编写程序是可以不处理;

  02.受查异常 是Exception类的直接子类,编写代码是需要处理;

  所有的异常和错误都是Throwable的子类。

  03.异常链的使用:

    把我们捕获的异常信息包装成一个新的异常,继续抛出!新异常中记录了异常的原始信息,便于我们找到异常的根本原因:

异常链案例:

 1 public class LinkDemo {
 2     // main方法
 3     public static void main(String[] args) {
 4         try {
 5             firstException();
 6         } catch (SQLException e) {
 7             e.printStackTrace();
 8         }
 9     }
10     // 第1个异常
11     private static void firstException() throws SQLException {
12         try {
13             secondException();
14         } catch (IOException e) {
15             e.printStackTrace();
16             throw new SQLException("第1个异常", e);
17         }
18     }
19     // 第2个异常
20     private static void secondException() throws IOException {
21         try {
22             thirdException();
23         } catch (InputMismatchException e) {
24             e.printStackTrace();
25             throw new IOException("第2个异常", e);
26         }
27     }
28     // 第3个异常
29     private static void thirdException() throws InputMismatchException {
30         throw new InputMismatchException("根本的异常");
31     }
32 }
LinkDemo

常用异常举例:

IOException        IO流异常
FileNotFoundException   文件没找到
ArithMeticException      算术异常
InputMismatchException    输入类型不匹配
NullPointerException       空指针异常
ClassNotFoundException     没有找到类
ClassCastException        类型转换异常

四:自定义异常

  异常类都是Throwable的子类,一般继承RunnableException,Exception类就可以了。

案例:

 1 public class MyException extends RuntimeException {
 2     public MyException() {
 3         super();
 4     }
 5     public MyException(String message) {
 6         super(message);
 7     }
 8     public MyException(String message, Throwable cause) {
 9         super(message, cause);
10     }
11     public MyException(Throwable cause) {
12         super(cause);
13     }
14 }
MyException

 

五:五个关键字

  try  catch  finally  throw  throws

try(尝试):

  01.不能单独使用,必须和catch/finally联合使用;

  02.存放可能出现 异常的代码;

  03.如果try代码块中出现了异常,回去匹配catch代码块对应的异常类型,

     如果没有匹配的类型,则走finally代码块。.

catch(捕获):

  01.可以有多个catch块,每个catch都能捕获一个类型的异常;

  02.多个catch块捕获的异常不能重复;

  03.多个catch块的类型必须是从小到大排列;

  04.如果多个catch块都能匹配,默认使用第一个匹配的;

  05.如果try中的代码没有出现异常,则catch代码块被忽略;

  06.每个代码块中的属性都是私有的;

finally(最终):

  01.无论代码是否发生异常,都会执行finally代码块;

  02.如果遇到了System.exit(0);或者System.exit(^0);,则不会执行finally;

  03.如果try代码块中出现了return,也是先执行finally,再跳出方法。

  04.finally中经常书写关闭流或者断开数据库连接资源的方法代码;

throw(抛出异常):

  01.语法 throw new  异常类型(异常信息);

  02.异常信息必须是Exception或者其子类;

  03.throw只能出现在方法体内,且只能抛出一个异常

  04.异常抛出以后,需要选择一种异常处理方式处理;

  05.如果使用声明异常的方式处理异常,则抛出的异常类型必须是声明的异常本身或者其子类。

throws(声明异常):

  01.语法 :  throws 异常类型1,异常类型2......

  02.定义在方法参数列表之后,可以声明多个异常类型;

  03.throws所在的方法不处理异常,方法的调用者处理异常;

  04.如果是在main方法中使用throws,则是JVM(java虚拟机)来处理异常(不建议使用该方法);

posted on 2017-12-15 13:50  阿抗  阅读(129)  评论(0编辑  收藏  举报