西故山 > 旅游 > 途中趣谈 > 趣谈Java中的异常处理(3)

趣谈Java中的异常处理(3)

来源:网络转载 2015-01-23 23:29 编辑: www.xigushan.com 查看:

针对于这种情况,我们可能就要采取更为“强硬的措施”了。例如直接报警把他带走(不让程序继续运行了),这就是所谓的运行时异常:

package com.tsr.j2seoverstudy.exception_demo; //砸场子异常 public class HitException extends RuntimeException { HitException() { super("草,砸场子,把你带走! "); } } 这时,餐馆类被修改为:package com.tsr.j2seoverstudy.exception_demo; public class MyRestaurant { private static String sicuation; static void doBusiness() throws DishesException, PowerCutException { if (sicuation.equals("菜里有虫") || sicuation.equals("菜里有头发")) { throw new DishesException(); } else if (sicuation.equals("停电")) { throw new PowerCutException(); } else if (sicuation.equals("砸场子")) { throw new HitException(); } } public static void main(String[] args) { try { sicuation = "砸场子"; doBusiness(); } catch (DishesException e) { // 换一盘菜或退款 } catch (PowerCutException e) { // 启动自备发电机 } } } 于是运行该程序,就会出现:

技术分享


可以看到出现该运行时异常,程序将直接被终止运行,砸场子的人直接被警察带走了。


那么接下来,我们就可以来看看第二种使用情况了,什么是所谓的“引发连锁效应的错误”。

举个例子来说,以我们上面用到的“被除数为0”的异常情况。你可能会思考:传入的被除数为0,这样的情况我们是可以考虑到的。

并且我们也可以针对这样的错误给出对应的措施。那Java为什么不将这样的异常定义为编译时检测异常呢?


那么我不妨假设ArithmeticException就是编译时检测异常,所以我们必须对其作出处理,那么可能出现这样的代码:

public class Test {     public static void main(String[] args) {         System.out.println("5除以0的结果为:" + division(5, 0));     }     static int division(int a, int b) {         int num = 0;         try{         num = a/b;         }catch (ArithmeticException e) {             num = -1;         }                  return num;     } } }我们提供了一个进行除法运算的方法,针对于传入的被除数为0的异常情况,我们也给出了自己的解决方案:

如果传入的被除数为0,就返回负数“-1”,“-1”就代表这个运算出错了。

于是这时有一个调用者,刚好调用了我们的除法运算方法计算“5除以0的结果”,理所当然的,他得到的结果为:

“5除以0的结果为-1”。好了,这下叼了,这哥们立马拿着这个运算结果,去向他的朋友炫耀:

你们都是2B吧,算不出5除以0等于多少是吧?告诉你们,等于-1。于是,在朋友的眼中,他成2B了。

牛刀小试 - 趣谈Java中的异常处理

标签:java   异常处理   趣味解析