博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
感觉JVM的默认异常处理不够好,既然不好那我们就自己来处理异常呗!那么如何自己处理异常呢?...
阅读量:6344 次
发布时间:2019-06-22

本文共 7363 字,大约阅读时间需要 24 分钟。

* 如果程序出现了问题,我们没有做任何处理,最终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...finally12  *             自己编写处理的代码,后面没有问题的程序可以继续执行。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...catch113     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 }

 

我的GitHub地址:
我的博客园地址:
我的蚂蚁笔记博客地址:
Copyright ©2018 黑泽明军
【转载文章务必保留出处和署名,谢谢!】
你可能感兴趣的文章
LCN5.0重连问题
查看>>
android官方开源的高性能异步加载网络图片的Gridview例子
查看>>
websphere安装
查看>>
Raspberry Pi开发之旅-WIFI遥控小车
查看>>
设计模式总结之结构型模式
查看>>
mysql -- 优化之ICP(index condition pushdown)
查看>>
Linux 下查看某个进程运行的堆栈信息
查看>>
链路层的双链路--大型服务器的优化体系
查看>>
【转】代码生成器集合
查看>>
MyBatis+PageHelper实现分页
查看>>
POJ 3070 Fibonacci
查看>>
HDU 2514 Another Eight Puzzle
查看>>
python中集合及运算
查看>>
python中的面向对象学习以及类的多态
查看>>
一些有用的链接
查看>>
json数据进行格式化
查看>>
react.js 测试
查看>>
快速排序
查看>>
【转】 vim显示行号、语法高亮、自动缩进的设置
查看>>
HDU 5533 Dancing Stars on Me 计算几何瞎暴力
查看>>