分享到:
发表于 2013-06-05 15:59:26 楼主 | |
1.不要滥用异常 只在必要情况下使用异常机制,异常处理不能代替简单的数据校验,因为异常机制会降低程序的性能。 以常见的堆毡处理为例,java.util.stack 类的pop方法的安全调用: 出栈之前检查栈堆是否为空 if(!S.empty0)s.pop0 使用异常保护,强行出栈 try{s.pop0;}catch(empty StackExcception e)
推荐使用第一种方法,因为与数据校验相比,捕获异常所花费的时间大大超过了前者,因此不需要使用异常处理的代码就不要用。
2.不要过分地细化异常 如果将每一条语句分装在一个独立的try语句块中,的确可以最大限度的保证程序的安全执行,但这将导致代码量的急剧膨胀,同时还会影响程序的运行逻辑。 看一段代码示例:从栈中弹出100个数值,然后将他们存入一个文件中 For(inti=0;<100;++i){ try{ n=s.pop(); }catch(EmptystackException){} try{ Out.writelnt(n);
}catch(IOE xception e){} }
在上例中,如果栈是空的,则文件写入值不正确;如果写文件出现错误,程序也会继承执行,问题也很难给与排除。 通常将具有事务性的整个任务包装在一个try语句块中,这样当任何一个操作出现问题时,整个任务都可以被取消,避免因为异常机制带来的逻辑异常。
3.合理利用异常层次结构
不要直接抛出exception 异常,应该寻找更加适当的子类或创建自己的异常类,尽量清楚的描述问题将有利于解决问题 不要直接使用catch捕获Throwable或exception 异常,偷懒会使程序代码难以调试和维护,除非你真的想忽略try中的所有异常。 将一种异常转换成一种更加适合的异常时不要犹豫。例如:在解析某个文件中的一个整数时,捕获NumberFormatException 异常,然后使用newIOException(nef)将它转换成IOException更加合适。
4.敢于传递异常 捕获异常是为例让业务完整的执行,如果发生的异常能够在方法内部处理而且不会影响调用者,那么就捕获它。如果异常将导致业务不能完整执行,那么就抛出异常,让高层次的方法通告用户发生了错误,放弃当前操作或进行重试。 例如readTextfile 示例中,此方法是为例向调用者返回文件的内容,但是如果方法中发生了OException那么方法将无法返回结果值,那么将异常抛出给调用者是最好的选择。这种思想也符合程序设计的低耦合概念,每一个方法都做好自己的事,能力之外的事让调用者去处理。 |
|
楼主热贴
个性签名:无
|
针对ZOL星空(中国)您有任何使用问题和建议 您可以 联系星空(中国)管理员 、 查看帮助 或 给我提意见