标签:
到现在为止已经清楚了异常的基本处理形式,但是遗留的两个问题: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://www.cnblogs.com/kvikon/p/4663165.html