针对于这种情况,我们可能就要采取更为“强硬的措施”了。例如直接报警把他带走(不让程序继续运行了),这就是所谓的运行时异常:
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 异常处理 趣味解析