感觉JVM的默认异常处理不够好,既然不好那我们就自己来处理异常呗!那么如何自己处理异常呢?
2018-03-29 23:48
393 查看
* 如果程序出现了问题,我们没有做任何处理,最终JVM会做出默认的处理。
* 把异常的名称、原因及出现的位置等信息输出在控制台。同时会结束程序。
*
* 但是呢,其余没有问题的程序就不能继续执行了。
* 所以感觉JVM的默认异常处理不够好,既然不好那我们就自己来处理异常呗!那么如何自己处理异常呢?
* 异常的处理方案
* A:try...catch...finally
* 自己编写处理的代码,后面没有问题的程序可以继续执行。
* B:throws 抛出
* 把自己处理不了的异常,在方法上声明,告诉调用者,这里有问题。
示例代码如下:
两/多个异常的处理
示例代码如下:
JDK7出现了一个新的异常处理方案及注意事项
示例代码如下:
* 把异常的名称、原因及出现的位置等信息输出在控制台。同时会结束程序。
*
* 但是呢,其余没有问题的程序就不能继续执行了。
* 所以感觉JVM的默认异常处理不够好,既然不好那我们就自己来处理异常呗!那么如何自己处理异常呢?
* 异常的处理方案
* A:try...catch...finally
* 自己编写处理的代码,后面没有问题的程序可以继续执行。
* B:throws 抛出
* 把自己处理不了的异常,在方法上声明,告诉调用者,这里有问题。
示例代码如下:
package cn.itcast_02; /* * 如果程序出现了问题,我们没有做任何处理,最终JVM会做出默认的处理。 * 把异常的名称、原因及出现的位置等信息输出在控制台。同时会结束程序。 * * 但是呢,其余没有问题的程序就不能继续执行了。 * 所以感觉JVM的默认异常处理不够好,既然不好那我们就自己来处理异常呗!那么如何自己处理异常呢? * * 异常的处理方案 * A:try...catch...finally * 自己编写处理的代码,后面没有问题的程序可以继续执行。 * B:throws 抛出 * 把自己处理不了的异常,在方法上声明,告诉调用者,这里有问题。 * * try...catch...finally的处理格式: * try { * 可能出现问题的代码; * } catch (异常类名 变量名) { * 针对问题的处理; * } finally { * 释放资源; * } * * 变形格式: * try { * 可能出现问题的代码; * } catch(异常类名 变量名) { * 针对问题的处理; * } * * 注意: * A:try里面的代码越少越好。 * B:catch里面必须有内容,哪怕是给出一个简单的提示。否则就隐藏了异常。 */ public class ExceptionDemo { public static void main(String[] args) { // 第一阶段 int a = 10; // int b = 2; int b = 0; try { System.out.println(a / b); } catch (ArithmeticException e) { // ArithmeticException 算术异常 System.out.println("除数不能为0"); } // 第二阶段 System.out.println("over"); } }
两/多个异常的处理
示例代码如下:
package cn.itcast_02; /* * A:一个异常的处理 * try...catch...finally的处理格式: * try { * 可能出现问题的代码; * } catch (异常类名 变量名) { * 针对问题的处理; * } finally { * 释放资源; * } * 变形格式: * try { * 可能出现问题的代码; * } catch(异常类名 变量名) { * 针对问题的处理; * } * * B:两/多个异常的处理 * a:每一个异常写一个try...catch * b:写一个try,多个catch * try { * 可能出现问题1的代码; * 可能出现问题2的代码; * 可能出现问题3的代码; * ... * } catch (异常类名1 变量名) { * 针对问题1的处理; * } catch (异常类名2 变量名) { * 针对问题2的处理; * } catch (异常类名3 变量名) { * 针对问题3的处理; * } * ... * 37 * 注意事项: 38 * 1:能明确具体的异常尽量明确,最好不要用大的异常(父亲)来处理。 39 * 2:平级关系的具体的异常谁前谁后无所谓,如果出现了子父关系得异常,父异常必须在后面。 * 41 * 注意: 42 * 一旦try里面出了问题,就会在这里把问题给抛出去,然后和catch里面的问题进行匹配, 43 * 一旦有匹配的,就执行catch里面的处理,然后就结束了try...catch语句,继续执行后面的语句。 */ public class ExceptionDemo2 { public static void main(String[] args) { // method1(); // method2(); // method3(); method4(); } // 多个异常的处理 public static void method4() { int a = 10; int b = 0; int[] arr = { 1, 2, 3 }; // 爷爷在最后可以 try { System.out.println(a / b); System.out.println(arr[3]); System.out.println("这里出现了一个异常,你不太清楚是谁,该怎么办呢?"); } catch (ArithmeticException e) { System.out.println("除数不能为0"); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("你访问了不该访问的索引"); } catch (Exception e) { // 不知道你出现的异常到底是哪一个具体的异常,反正你是异常,那么就用异常的父类(你的父亲)来接收。即不管我针对哪一个具体的异常都可以处理。 System.out.println("出问题了"); } /* // 爷爷在前面是不可以的 try { System.out.println(a / b); System.out.println(arr[3]); System.out.println("这里出现了一个异常,你不太清楚是谁,该怎么办呢?"); } catch (Exception e) { System.out.println("出问题了"); } catch (ArithmeticException e) { System.out.println("除数不能为0"); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("你访问了不该的访问的索引"); } */ System.out.println("over"); } // 两个异常的处理:写一个try,多个catch public static void method3() { int a = 10; int b = 0; int[] arr = { 1, 2, 3 }; try { System.out.println(arr[3]); System.out.println(a / b); // System.out.println(arr[3]); } catch (ArithmeticException e) { System.out.println("除数不能为0"); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("你访问了不该的访问的索引"); } System.out.println("over"); } // 两个异常的处理:每一个异常写一个try...catch public static void method2() { int a = 10; int b = 0; try { System.out.println(a / b); } catch (ArithmeticException e) { System.out.println("除数不能为0"); } int[] arr = { 1, 2, 3 }; try { System.out.println(arr[3]); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("你访问了不该的访问的索引"); } System.out.println("over"); } // 一个异常的处理 public static void method1() { // 第一阶段 int a = 10; // int b = 2; int b = 0; try { System.out.println(a / b); } catch (ArithmeticException e) { System.out.println("除数不能为0"); } // 第二阶段 System.out.println("over"); } }
JDK7出现了一个新的异常处理方案及注意事项
示例代码如下:
package cn.itcast_02; /* * JDK7出现了一个新的异常处理方案及注意事项: * try { * 可能出现问题1的代码; * 可能出现问题2的代码; * ... * } catch (异常类名1 | 异常类名2 | ... 变量名 ) { * 针对问题的处理; * } * 13 * 注意事项:这个方法虽然简洁,但是也不够好。 14 * A:对多个异常的处理方式是一致的。(但是实际开发中,好多时候可能就是针对同类型的问题,给出同一个处理方式,是符合我们的开发要求的) 15 * B:多个异常间必须是平级关系。 */ public class ExceptionDemo3 { public static void main(String[] args) { method(); } public static void method() { int a = 10; int b = 0; int[] arr = { 1, 2, 3 }; /* // JDK7以前的异常处理方案 try { System.out.println(a / b); System.out.println(arr[3]); System.out.println("这里出现了一个异常,你不太清楚是谁,该怎么办呢?"); } catch (ArithmeticException e) { System.out.println("除数不能为0"); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("你访问了不该的访问的索引"); } catch (Exception e) { System.out.println("出问题了"); } */ // JDK7出现了一个新的异常处理方案 try { System.out.println(a / b); System.out.println(arr[3]); } catch (ArithmeticException | ArrayIndexOutOfBoundsException e) { System.out.println("出问题了"); } System.out.println("over"); } }
相关文章推荐
- IO流_JVM默认是如何处理异常的
- Java基础学习总结---------异常Exception(3) -JVM默认如何处理异常
- Qt中如何禁掉所有UI操作以及注意事项(处理各个widget的eventFilter这一层,但是感觉不好,为什么不使用QApplication呢)
- 主要通过你的行为看你的编程能力,除了让你做算法题外,更重要的是你实际写过的代码和项目,效率如何?有没有考虑过异常处理?实际的访问性能如何?有没有开过自己的 github 项目,或者是给知名项目贡献过源
- JVM对异常的默认处理方案
- 如果客户机器无法从DHCP服务器中获取IP地址那么Windows Server 2003客户机器将会如何处理自己的TCP/IP设置
- 1 异常的概述和体系结构: jvm处理异常的方式和try。。。Catch处理异常:异常的抛出:如何处理多个异常:Throwable的常用的方法:异常的分类 自定义异常:
- jvm默认异常处理,和自定义异常处理
- 异常?C语言程序中我们如何管控(处理)运行期间的运行异常
- 当有人向自己说出想法的时候,我们该如何处理
- Android(java)学习笔记82:我们到底该如何处理异常?
- jvm是如何处理异常的
- Java_基础—异常的概述和分类/JVM默认处理异常的方式
- 遇到一个IE升级到IE8之后脚本无法跑的问题。那么对于这样的问题,我们需要如何去处理?
- 如何自己处理程序异常
- JAVA语言如何进行异常处理
- 键盘方法假如我们的电脑键盘失灵了那么该怎么应急处理和诊断技巧
- 2013已过去,迎来2014,我们该如何规划自己的生活及职业生涯
- [C/C++] 第17章 用于大型程序的工具 [ 异常处理,命名空间,多重继承与虚继承 ] (不够熟) 《 C++ Primer 》
- 【win7系统】假如我们的电脑键盘失灵了那么该怎么应急处理和诊断技巧