基于java的异常处理技术及其应用内容摘要:
owable类的 printStacktrace方法来获得堆栈结构的文本描叙。 现在,可以通过调用 getStackTrace方法来获得一个 StackTraceElement对象的数组,通过研究该数组,就可以分析程序运行情况。 例如: Throwable t = new Throwable ( )。 StackTraceElement[ ] frames = ( )。 For ( int i= 0。 i。 i++) 使用 StackTraceElement类提供的方法获取文件名以及当前执行的代码行行号的方法,同样,它还提供获取类名 、 方法名的方法。 而 toString方法可以产生一个格式化字符串,其中包含那些获得的信息。 以下程序。 import .*。 import .*。 public class StackTest { /** 返回 n! = 1 * 2 * . . . * n 的结果 */ public static int factorial (int n) { (factorial ( + n + ): )。 Throwable t = new Throwable( )。 StackTraceElement[ ] frames = ()。 for ( int i = 0。 i。 i++ ) ( frames[ i] )。 int r。 if (n = 1) r = 1。 else r = n * factorial(n 1)。 // 递归调用 factorial()方法 (return + r)。 return r。 } 10 public static void main(String[] args) { String input = ( 请输入一个整数 : )。 int n =(input)。 factorial(n)。 ( 0 )。 //退出程序 } } 由于需要从标准输入中获取整数数字, (input)方法可能会产生。 运行程序时界面: 图 3- 1 输入界面 如果我们要实现递归方法 factorial(3),通过 getStackTrace方法可以查看程序运行的过程。 其结果为如下: 图 3- 2 递归方法 factorial(3)的输出结果 而这个程序可能产生的一个异常是 NumberFormatException异常。 当异常产生后, JVM调用该异常处理。 其运行界面如下: 11 图 3- 3 输入一个产生 异常 的 数据 返回到控制台的结果为描述该异常: 图 3- 4 输入异常数据 时在控制台产生的结果 (四)自定义异常 由于在 Java 中 ,异常也被看成是对象 ,而且 异常 和一般的对象没有什么不同。 因此 ,任何类都可以定义它自己的异常 ,并用 throw 语句引发它们。 其中 ,throw 语句由带有一个对象的关键字 throw 组成 ,这个对象应该是 Exception 或其子类的一个实体对象。 要注意的是 ,当执行了一条 throw 语句后 ,就不会执行该语句之后的任何代码了。 通常每 个异常类提供一个默认的构造器以及一个包含详细信息的构造器。 使用Throwable 的 toString 方法会输出该详细信息,这个方法对代码调 试是很有用处。 例如 创建这样的异常类: class FileFormatException extends IOException { public FileFormatException ( ) { } public FileFormatException ( ) { super ( gripe)。 } 12 } String readData ( BufferedReader in ) throws FileFormatException { „„ while ( „„ ) { if ( ch==1) //EOF 标记,即文件结尾 { if (nlen) throw new FileFormatException ( )。 //抛出自定义的异常类 FileFormatException } „„ } return s。 } (五)关于图形界面程序的异常捕获 对于一个非图形界面的程序而言,如果一个异常没有被捕获,则程序会终止运行并且在控制台输出一条包含异常类型以及堆栈内容的信息。 而对于具有图形界面的程序(包含applet以及应用程序),也会输出这些错误信息,但是程序会返回用户界面外层循环中去。 下面我们从一个有趣的程序 颜色调和板来讨论图形界面程序处理异常的情况。 在 (源代码见附录) 中,程序可以根据我们输入红色 、 绿色 、蓝色( RGB) 、 亮度 、 饱和度 和 色度值来调节颜色。 整个程序除了可能会产生RuntimeException异常外,这个程序还会产生 NumberFormatException异常。 当然这是已检查型异常。 下面我们来看它在 JVM中的运行情况: 图 4- 1 输入正常数据时的颜色调和板 13 当我们改变 ”红色 ”值为非法的一个输入,比如: “AB”时,其运行结果为如下: 图 4- 2 输入一个产生异常的数据 颜色未变化,好像程序发生逻辑错误似的(没有按照我们希望的去运行)其实程序已将控制权转到控制中心去了,这个图形还处于初始化阶段(在输入 “AB”前 )。 在控制中心我们发现如下一些异常发生描述: 图 4- 3 异常产生后返回到控制台的说明 这说明发生了 NumberFormatException(数字格式异常)异常后,并没有继续往下执行代码。 由于数字格式异常为已检查型异常,直接调用系统的方法处理了。 JVM报告程序发生了数字格式异常产生,并将其具体的情况报告给用户。 但是,是不是这个程序不能再接受正常的输入数据运行呢。 还是必须要重新启动才能运行。 我们将 “红色 ”值由 “AB”改为 “200”后发现颜色改变,这说明该程序还能运行。 结果如下图: 图 4- 4 将产生异常的输入数据更改后的颜色调和板 可见当输入了正常的数据后,程序就像第一次运行一样,可以正确的显示颜色了。 我 14 们得到的结论是:部分 Java图形界面程序发生异常后不需要重新初始化,依旧可以运行,但必须不再有异常发生。 五 Java 异常处理 基本原则 合理使用 Java异常机制可以使程序健壮而清晰 ,但是 ,Java异常处理机制 也 常常 会 被错误 地 使用 ,下面就讨论一些关于 使用异常 的 原则 : (一 )不要忽略 已检查型异常 注意 下面的代码 : try { method1()。 //method1抛出 Exception A } catch(Exception A) //捕获 Exception A { ( )。 //打印捕获异常 } 上面的代码似乎没有什么问题 ,捕获异常后将异常打印 ,然后继续执行。 事实上在 catch块中对发生的异常情况并没有作任何处理。 虽然程序能够继续执行 ,但是由于这里的操作已经发生异常 ,将会导致以后的操作不能按照预期的情况发展下去 ,可能导致两个结果。 一种情况是这里的异常导致在程序中别的地方抛出一个异常 ,这会使程序 员在调试时感到迷惑 ,因为新的异常抛出的地方并不是程序真正发生问题的地方 ,也不是发生问题的真正原因。 另外一种情况程序继续运行 ,并得出一个错误的输出结果 ,这种问题更加难以捕捉 ,因为很可能把它当成一个正确的输出。 那么应该如何处理呢。 一般 有四个选择 :处理异常 ,进行修复以让程序继续执行。 重新抛出异常 ,在对异常进行分析后发现这里不能处理它 ,那么重新抛出异常 ,让调用者处理。 将异常转换为用户可以理解的自定义异常再抛出 ,这时应该注意不要丢失原 始异常信息。 不要捕获异常。 因此 ,当捕获一个 未检查型异常 时 ,必须对异常进行处理。 如果认为不必要在这里作处理 ,就不要捕获该异常 ,在方法体中声明方法抛出异常 ,由上层调用者来处理该异常。 15 (二 )不要一次捕获所有的异常 我们常见如下关于异常处理的代码 : try { method1()。 //method1抛出 ExceptionA method2()。 //method2抛出 ExceptionB method3()。 //method3抛出 ExceptionC } catch(Exception e) //捕获所有异常 { „„ } 代码中使用一个 catch子句捕获了所有异常 ,看上去很简洁 ,一个代码段就捕获了全部的异常。 但是这里有两个潜在的缺陷 ,一是对 try块中抛出的每种 异常 ,很可能需要不同的处理和恢复措施 ,而由于这里只有一个 catch块 ,分别处理就不能实现。 二是 try块中还可能抛出 RuntimeException,代码中。基于java的异常处理技术及其应用
相关推荐
1、敌被大量杀伤,害虫因失去自然控制和抗药性增强而猖獗,并带来环境污染和残毒等问题。 因此,推广生物防治,利用天敌控制害虫,尽量少用以至不用化学农药,把害虫的危害控制在允许水平之内,已成为人们的迫切要求。 但是,在生产实践中,完全不施用农药几乎是不可能的,尤其是在害虫大发生和严重危害的情况下,不使用化学农药就难以避免造成经济损失。 据估计,在防治稻田害虫中,化学农药所起的作用约占
本 否 否 购买数量 BuyNumber 数字 否 否 注意输入格式 ( 5) assess 表:用来管理评价基本信息,字段包括:评价编号、用户名称、评级内容、评价时间。 结构如表 35 所示。 14 表 35 assess 表 属性名 存储代码 数据 类型 是否主键 允许空值 备注 评价编号 assessID 数字 是 否 自动 用户名称 UserName 文本 否 否 外键 评价内 容
Notes: The file controls which HTML form request maps to which ActionForm. Multiple requests can be mapped UserActionForm. UserActionForm can be mapped over multiple pages for things such as wizards.
架 Struts 框架可分为以下四个主要部分,其中三个就和 MVC 模式紧密相关: 1模型 (Model),本质上来说在 Struts 中 Model 是一个 Action 类,开发者通过其实现商业逻辑,同时用户请求通过控制器 (Controller)向 Action 的转发过程是基于由 文件描述的配置信息的。 2视图 (View), View 是由与控制器 Servlet 配合工作的一整套
农业技术全集之植,花枯萎病是一种为害严重的侵染性病害,从苗期到花蕾期都可得病,对棉花的产量威胁很大,为促进得病的棉苗早日恢复,从 2003 年开始我们用劈茎法治疗棉花枯萎病取得了较好的效果,治愈率达 99%左右。 而且其方法简单快速,每小时能劈茎 400 株左右。 现将具体操作方法介绍如下:当发现棉花枯萎病苗处于发病初期时,用一把锋利的小刀,用左手的大拇指和食指稳住病苗的茎秆
的系统用例图 用户( user)通过登录界面与服务器( Server)进行通信,不仅能够注册新账号,还能通过 Server与在线好友进行聊天,包括文本消息传递和音频信号传输,还能管理自己的好友列表,如删除好友等。 如图 31系统的总体功能用例 图所示: 图 31 系统的总体功能用例图 注册登录:用户可以通过注册界面填写必要的信息来是申请到一个账户,并可直接跳转到登录界面,输入密码即可登录。