• 感觉JVM的默认异常处理不够好,既然不好那我们就自己来处理异常呗!那么如何自己处理异常呢?


    * 如果程序出现了问题,我们没有做任何处理,最终JVM会做出默认的处理。
    * 把异常的名称原因出现的位置等信息输出在控制台。同时会结束程序。
    *
    * 但是呢,其余没有问题的程序就不能继续执行了。
    * 所以感觉JVM的默认异常处理不够好,既然不好那我们就自己来处理异常呗!那么如何自己处理异常呢?

    * 异常的处理方案
    *    A:try...catch...finally
    *      自己编写处理的代码,后面没有问题的程序可以继续执行。
    *    B:throws 抛出
    *      把自己处理不了的异常,在方法上声明,告诉调用者,这里有问题。

      示例代码如下:

     1 package cn.itcast_02;
     2 
     3 /* 
     4  * 如果程序出现了问题,我们没有做任何处理,最终JVM会做出默认的处理。
     5  * 把异常的名称、原因及出现的位置等信息输出在控制台。同时会结束程序。
     6  *            
     7  * 但是呢,其余没有问题的程序就不能继续执行了。
     8  * 所以感觉JVM的默认异常处理不够好,既然不好那我们就自己来处理异常呗!那么如何自己处理异常呢?
     9  * 
    10  * 异常的处理方案
    11  *         A:try...catch...finally
    12  *             自己编写处理的代码,后面没有问题的程序可以继续执行。
    13  *         B:throws 抛出
    14  *             把自己处理不了的异常,在方法上声明,告诉调用者,这里有问题。
    15  * 
    16  * try...catch...finally的处理格式:
    17  *         try {
    18  *             可能出现问题的代码;
    19  *         } catch (异常类名 变量名) {
    20  *             针对问题的处理;
    21  *         } finally {
    22  *             释放资源;
    23  *         }
    24  * 
    25  * 变形格式:
    26  *         try {
    27  *             可能出现问题的代码;
    28  *         } catch(异常类名 变量名) {
    29  *             针对问题的处理;
    30  *         }
    31  * 
    32  * 注意:
    33  *         A:try里面的代码越少越好。
    34  *         B:catch里面必须有内容,哪怕是给出一个简单的提示。否则就隐藏了异常。
    35  */
    36 public class ExceptionDemo {
    37     public static void main(String[] args) {
    38         // 第一阶段
    39         int a = 10;
    40         // int b = 2;
    41         int b = 0;
    42 
    43         try {
    44             System.out.println(a / b);
    45         } catch (ArithmeticException e) { // ArithmeticException 算术异常
    46             System.out.println("除数不能为0");
    47         }
    48 
    49         // 第二阶段
    50         System.out.println("over");
    51     }
    52 }

    两/多个异常的处理

      示例代码如下:

      1 package cn.itcast_02;
      2 
      3 /*
      4  * A:一个异常的处理
      5  *         try...catch...finally的处理格式:
      6  *             try {
      7  *                 可能出现问题的代码;
      8  *             } catch (异常类名 变量名) {
      9  *                 针对问题的处理;
     10  *             } finally {
     11  *                 释放资源;
     12  *             }
     13  *         变形格式:
     14  *             try {
     15  *                 可能出现问题的代码;
     16  *             } catch(异常类名 变量名) {
     17  *                 针对问题的处理;
     18  *             }
     19  * 
     20  * B:两/多个异常的处理
     21  *         a:每一个异常写一个try...catch
     22  *         b:写一个try,多个catch
     23  *             try {
     24  *                 可能出现问题1的代码;
     25  *                 可能出现问题2的代码;
     26  *                 可能出现问题3的代码;
     27  *                 ...
     28  *             } catch (异常类名1 变量名) {
     29  *                 针对问题1的处理;
     30  *             } catch (异常类名2 变量名) {
     31  *                 针对问题2的处理;
     32  *             } catch (异常类名3 变量名) {
     33  *                 针对问题3的处理;
     34  *             }
     35  *             ...
     36  * 
     37  *             注意事项:
     38  *                 1:能明确具体的异常尽量明确,最好不要用大的异常(父亲)来处理。
     39  *                 2:平级关系的具体的异常谁前谁后无所谓,如果出现了子父关系得异常,父异常必须在后面。
     40  * 
     41  * 注意:
     42  *         一旦try里面出了问题,就会在这里把问题给抛出去,然后和catch里面的问题进行匹配,
     43  *         一旦有匹配的,就执行catch里面的处理,然后就结束了try...catch语句,继续执行后面的语句。
     44  */
     45 public class ExceptionDemo2 {
     46     public static void main(String[] args) {
     47         // method1();
     48 
     49         // method2();
     50 
     51         // method3();
     52 
     53         method4();
     54     }
     55     
     56     // 多个异常的处理
     57     public static void method4() {
     58         int a = 10;
     59         int b = 0;
     60         int[] arr = { 1, 2, 3 };
     61 
     62         // 爷爷在最后可以
     63         try {
     64             System.out.println(a / b);
     65             System.out.println(arr[3]);
     66             System.out.println("这里出现了一个异常,你不太清楚是谁,该怎么办呢?");
     67         } catch (ArithmeticException e) {
     68             System.out.println("除数不能为0");
     69         } catch (ArrayIndexOutOfBoundsException e) {
     70             System.out.println("你访问了不该访问的索引");
     71         } catch (Exception e) { // 不知道你出现的异常到底是哪一个具体的异常,反正你是异常,那么就用异常的父类(你的父亲)来接收。即不管我针对哪一个具体的异常都可以处理。
     72             System.out.println("出问题了");
     73         }
     74 
     75         /*
     76         // 爷爷在前面是不可以的
     77         try {
     78             System.out.println(a / b);
     79             System.out.println(arr[3]);
     80             System.out.println("这里出现了一个异常,你不太清楚是谁,该怎么办呢?");
     81         } catch (Exception e) {
     82             System.out.println("出问题了");
     83         } catch (ArithmeticException e) {
     84             System.out.println("除数不能为0");
     85         } catch (ArrayIndexOutOfBoundsException e) {
     86             System.out.println("你访问了不该的访问的索引");
     87         }
     88         */
     89 
     90         System.out.println("over");
     91     }
     92 
     93     // 两个异常的处理:写一个try,多个catch
     94     public static void method3() {
     95         int a = 10;
     96         int b = 0;
     97         int[] arr = { 1, 2, 3 };
     98 
     99         try {
    100             System.out.println(arr[3]); 
    101             System.out.println(a / b);
    102             // System.out.println(arr[3]);
    103         } catch (ArithmeticException e) {
    104             System.out.println("除数不能为0");
    105         } catch (ArrayIndexOutOfBoundsException e) {
    106             System.out.println("你访问了不该的访问的索引");
    107         }
    108 
    109         System.out.println("over");
    110     }
    111 
    112     // 两个异常的处理:每一个异常写一个try...catch
    113     public static void method2() {
    114         int a = 10;
    115         int b = 0;
    116         try {
    117             System.out.println(a / b);
    118         } catch (ArithmeticException e) {
    119             System.out.println("除数不能为0");
    120         }
    121 
    122         int[] arr = { 1, 2, 3 };
    123         try {
    124             System.out.println(arr[3]);
    125         } catch (ArrayIndexOutOfBoundsException e) {
    126             System.out.println("你访问了不该的访问的索引");
    127         }
    128 
    129         System.out.println("over");
    130     }
    131 
    132     // 一个异常的处理
    133     public static void method1() {
    134         // 第一阶段
    135         int a = 10;
    136         // int b = 2;
    137         int b = 0;
    138 
    139         try {
    140             System.out.println(a / b);
    141         } catch (ArithmeticException e) {
    142             System.out.println("除数不能为0");
    143         }
    144 
    145         // 第二阶段
    146         System.out.println("over");
    147     }
    148 }

    JDK7出现了一个新的异常处理方案及注意事项

      示例代码如下:

     1 package cn.itcast_02;
     2 
     3 /*
     4  * JDK7出现了一个新的异常处理方案及注意事项:
     5  *         try {
     6  *             可能出现问题1的代码;
     7  *             可能出现问题2的代码;
     8  *             ...
     9  *         } catch (异常类名1 | 异常类名2 | ...  变量名 ) {
    10  *             针对问题的处理;
    11  *         }
    12  * 
    13  *         注意事项:这个方法虽然简洁,但是也不够好。
    14  *             A:对多个异常的处理方式是一致的。(但是实际开发中,好多时候可能就是针对同类型的问题,给出同一个处理方式,是符合我们的开发要求的)
    15  *             B:多个异常间必须是平级关系。
    16  */
    17 public class ExceptionDemo3 {
    18     public static void main(String[] args) {
    19         method();
    20     }
    21 
    22     public static void method() {
    23         int a = 10;
    24         int b = 0;
    25         int[] arr = { 1, 2, 3 };
    26 
    27         /*
    28         // JDK7以前的异常处理方案
    29         try {
    30             System.out.println(a / b);
    31             System.out.println(arr[3]);
    32             System.out.println("这里出现了一个异常,你不太清楚是谁,该怎么办呢?");
    33         } catch (ArithmeticException e) {
    34             System.out.println("除数不能为0");
    35         } catch (ArrayIndexOutOfBoundsException e) {
    36             System.out.println("你访问了不该的访问的索引");
    37         } catch (Exception e) {
    38             System.out.println("出问题了");
    39         }
    40         */
    41 
    42         // JDK7出现了一个新的异常处理方案
    43         try {
    44             System.out.println(a / b);
    45             System.out.println(arr[3]);
    46         } catch (ArithmeticException | ArrayIndexOutOfBoundsException e) {
    47             System.out.println("出问题了");
    48         }
    49 
    50         System.out.println("over");
    51     }
    52 
    53 }
  • 相关阅读:
    行列式运算法则
    神经元的数学模型
    Neural Network and Artificial Neural Network
    常见的23种设计模式
    Java 基本数据类型 及 == 与 equals 方法的区别
    MySQL经典编程问题
    MyEclipse配置tomcat报错
    MySQL 日期类型函数及使用
    MySQL dump文件导入
    MySQL 的两个特殊属性 unsigned与 zerofill
  • 原文地址:https://www.cnblogs.com/chenmingjun/p/8673373.html
Copyright © 2020-2023  润新知