突破Java异常处理规则
Posted on 八月 16rd, 2007 由 admin
热门问答:
推荐阅读
| · 9@9c之java程序金山词霸 |
| 摘要:有网友问《金山词霸》这个java怎么样。在此小叙下,企盼网友大作。《金山词霸》所有数据需要通过网络下载属“在线翻译”。就是说要用《金山词霸》你就要掏gprs流量费。实是不花算。其说明说查询服务计费采用包月方式,首月免费。从网上下载k700的《金山词霸》jar文件;用红外传入手机。&n...... |
| · 商业周刊:mic竞购战 谁将是最后的赢家? |
| 摘要: 美国东部时间3月18日(北京时间3月18日)消息,去年9月,qwest国际电信公司的高管相信,他们收购mci公司近在咫尺。qwest公司的ceo理查德-诺特巴特(richardnotebaert)和mci公司的ceo米切尔-卡普拉斯(michaelcapellas)选择在纳什维尔的一个饭店会晤,这是一个位于双方总部中间的中立场所。会晤期间,卡普拉斯称,“我们开始讨论合并事宜”,因为他相信qwest公司是mci的最佳拍挡。...... |
正文
q: 我在我的应用程序中调用了外部方法并且想捕获它可能抛出的异常。我能捕获java.lang.exception吗?
a: 通过一个给定的方法去处理所有运行时和检测异常对于预防外部错误是不充分的。
你可以去读目前 javaworld文章 – “java tip 134: when catching exception, don’t cast your net too wide”。这篇文章警告了捕获java.lang.exception和java.lang.throable是不好的。捕获你能指定的异常对于代码的可维护性是十分重要的。然而这个规则依赖于特殊的环境。如果你不打算你的程序崩溃并且保留你的数据结构的安全异常,那么你必须捕获被抛出的真正的异常。
举个例子,想象你有一个加载了这个接口的服务器应用:
对于给出参数的理由是让我们通知你这样的服务在什么地方,并且不同的ifoo实现能够从外部资源加载上。你写如下代码:
并且你在这个里处理了所有可能的异常。你不需要在这里加上任何捕获java.io.ioexception的异常,因为ifoo实现没有从ifoo.bar()中抛出它,对吗?(事实上,如果你加上了捕获java.io.ioexception异常块,编译器可能会把它作为不可到达的异常而丢弃)
错误。在我写的evilfoo类中bar()方法证明了将抛出你传递给类构造器的任何异常:
运行main方法:
你将看到从bar()方法抛出的java.io.ioexception异常实例并且没有任何捕获块:
在这里发生了什么?


讨论区