黑马程序员技术交流社区

标题: 异常处理结构 [打印本页]

作者: dadai5ai    时间: 2015-7-28 21:57
标题: 异常处理结构

到现在为止已经清楚了异常的基本处理形式,但是遗留的两个问题:finally无用、throw无用,那么为了更好的解释这两个操作的含义,给出一个异常处理的标准结构。

范例:现在要求定义一个div()方法(定义在MyMath类里面),这个方法开发要求如下:

         · 此方法之中所有出现的异常一定要交给被调用处进行处理;

         · 在进行除法计算开始首先要输出一行提示信息“1、除法计算开始,打开计算功能”;

         · 在除法计算进行完毕之后也要输出一行提示信息“2、除法计算结束,关闭计算功能”;

         在所有的开发之中,首先一定要完成的是基本功能,不考虑任何有可能出现错误的情况。

范例:基本要求

class MyMath {
         public static int div(int x,int y) throws Exception {    // 异常由被调用处处理
                   int result = 0 ;      // 保存除法计算结果
                   System.out.println("1、除法计算开始,打开计算功能。") ;
                   result = x / y ;      // 进行除法计算
                   System.out.println("2、除法计算结束,关闭计算功能。") ;
                   return result ;
         }
}
public class TestDemo {
         public static void main(String args[]) {
                   try {
                            System.out.println("除法计算结果:"  + MyMath.div(10,2))  ;
                   } catch (Exception e) {
                            e.printStackTrace() ;
                   }
         }
}
1、除法计算开始,打开计算功能。
2、除法计算结束,关闭计算功能。
除法计算结果:5

         但是如果此时在除法计算过程之中出现了错误,则输出的信息如下。

1、除法计算开始,打开计算功能。
java.lang.ArithmeticException: / by zero
        at MyMath.div(TestDemo.java:5)
        at TestDemo.main(TestDemo.java:13)

         出错之后发现原本的设计是无法满足于当前要求的。

范例:标准结构

class MyMath {
         public static int div(int x,int y) throws Exception {        // 异常由被调用处处理
                   int result = 0 ;    // 保存除法计算结果
                   System.out.println("1、除法计算开始,打开计算功能。") ;
                   try {
                            result = x / y ;     // 进行除法计算
                   } catch (Exception e) {
                            throw e ;
                   } finally {
                            System.out.println("2、除法计算结束,关闭计算功能。") ;
                   }
                   return result ;
         }
}
public class TestDemo {
         public static void main(String args[]) {
                   try {
                            System.out.println("除法计算结果:" + MyMath.div(10,0))  ;
                   } catch (Exception e) {
                            e.printStackTrace() ;
                   }
         }
}

         在本结构之中就出现了try、catch、finally、throw、throws的标准组合应用。日后可以把两条输出语句理解为资源的打开和资源的关闭。当然,以上的代码还可以更加的简化,直接使用try…finally操作。

class MyMath {
         public static int div(int x,int y) throws Exception {     // 异常由被调用处处理
                   int result = 0 ;      // 保存除法计算结果
                   System.out.println("1、除法计算开始,打开计算功能。") ;
                   try {
                            result = x / y ;     // 进行除法计算
                   } finally {
                            System.out.println("2、除法计算结束,关闭计算功能。") ;
                   }
                   return result ;
         }
}

         一般情况下,当捕获了异常之后往往需要简单的执行一些处理操作。







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2