前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >感觉JVM的默认异常处理不够好,既然不好那我们就自己来处理异常呗!那么如何自己处理异常呢?

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

作者头像
黑泽君
发布2018-10-11 14:37:56
3260
发布2018-10-11 14:37:56
举报
文章被收录于专栏:黑泽君的专栏

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

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

  示例代码如下:

代码语言:javascript
复制
 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 }

两/多个异常的处理

  示例代码如下:

代码语言:javascript
复制
  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出现了一个新的异常处理方案及注意事项

  示例代码如下:

代码语言:javascript
复制
 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 }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-03-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档