本文共 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 黑泽明军 【转载文章务必保留出处和署名,谢谢!】