[]你必须要知道的Java 异常的捕获与处理(详解附源码)( 二 )
但是 , 对于之前的程序又有了问题:现在执行数学计算的两个参数 , 都是由程序默认提供 , 那么如果说现在两个计算的参数通过初始化参数传递呢?public class Test {public static void main(String args[]) {System.out.println("1、除法计算开始 。");try {int x = Integer.parseInt(args[0]); // 接收参数int y = Integer.parseInt(args[1]); // 接收参数int result = x / y;System.out.println("2、除法计算结果:" + result);} catch (ArithmeticException e) {e.printStackTrace();} finally {System.out.println("不管是否出现异常都执行");}System.out.println("3、除法计算结束 。");}}
这个时候 , 数据由外部传送 , 那么就有可能出现以下几类问题:
(1)执行时不输入参数(java TestDemo) , ArrayIndexOutOfBoundsException , 未处理;
(2)输入的参数不是数字(java TestDemo a b) , NumberFormatException , 未处理;
(3)被除数为0(java TestDemo 10 0) , ArithmeticException , 已处理 。
可以发现 , 以上的程序实际上是存在三种异常 , 而程序之中只能够处理一种 , 而对于不能处理的异常 , 发现程序依然会直接中断执行 。
加入多个catch:public class Test {public static void main(String args[]) {System.out.println("1、除法计算开始 。");try {int x = Integer.parseInt(args[0]);int y = Integer.parseInt(args[1]);int result = x / y;System.out.println("2、除法计算结果:" + result);} catch (ArithmeticException e) {e.printStackTrace();} catch (ArrayIndexOutOfBoundsException e) {e.printStackTrace();} catch (NumberFormatException e) {e.printStackTrace();} finally {System.out.println("不管是否出现异常都执行");}System.out.println("3、除法计算结束 。");}}
现在 , 程序比之前更健壮了 。
【[]你必须要知道的Java 异常的捕获与处理(详解附源码)】三、异常的处理流程
以上已经完成了异常的基本处理 , 但是所有的异常都像之前那样一条条的判断似乎是一件不可能完成的任务 , 因为日后肯定会接触到一些不常见的异常信息 , 那么下面就必须首先研究异常的流程和结构 。
先查看两个异常类的继承结构:
(1)ArithmeticException:java.lang.Object|- java.lang.Throwable|- java.lang.Exception|- java.lang.RuntimeException|- java.lang.ArithmeticException
(2)ArrayIndexOutOfBoundsException:java.lang.Object|- java.lang.Throwable|- java.lang.Exception|- java.lang.RuntimeException|- java.lang.IndexOutOfBoundsException|-java.lang.ArrayIndexOutOfBoundsException
可以发现 , 所有的异常类型最高的继承类是Throwable , Throwable下有两个子类:
(1)Error:指的是JVM错误 , 这个时候的程序并没有执行 , 无法处理;
(2)Exception:指的是程序之中出现的错误信息 , 可以进行异常处理 。
通过继承关系可以发现 , 在进行日后异常处理的时候是以Exception为主 , 并且可以形成以下的异常处理流程:
文章图片
文章图片
image
(1)如果程序中产生了异常 , 那么JVM根据异常的类型 , 实例化一个指定异常类的对象;
(2)如果这时程序中没有任何的异常处理操作 , 则这个异常类的实例化对象将交给JVM进行处理 , 而JVM的默认处理方式就是进行异常信息的输出 , 而后中断程序执行;
(3)如果程序中存在了异常处理 , 则会由try语句捕获产生的异常类对象;
推荐阅读
- 电脑数码精通|夏季如何让电脑的故障率降到最低?早知道早做准备吧
- 戏说新金融|你从借呗借的那些钱来自哪里,你知道吗?“借呗”的那些事“借呗”的钱从哪来?
- |搭建Prometheus平台,你必须考虑的6个因素
- IT168|都知道vivo X50Pro稳 想不到夜拍才是杀手锏
- 未来科技圈|618不知道怎么选购笔记本电脑 主流轻薄高性能游戏本推荐
- 小阳说科技|不知道这3个功能,你八成是个假“果粉”
- GaGaHi|全球最火的8个海外社交平台,你知道几个?
- 冬季初雪|烟草局三年后年薪15万,不及互联网企业?网友:还有不知道的收入
- 燕七TB|给宝马做汽车音响的牌子你可以知道,小小挂脖蓝牙耳机也玩顶配
- 手机大魔王|荣耀X10和Redmi10X到底该怎么选?看这几点就知道