日期:2014-05-20  浏览次数:20657 次

问个问题:既然java有异常、抛异常用法,那程序员为什么在写代码时,不谨慎点,?
本帖最后由 hello2013year 于 2013-01-16 10:17:34 编辑
百思不得其解。
这不是多余的吗? 脱开裤子放屁?

既然java有try{}、catch{}  finally 、throw、throws,  这这些加在代码那里,还不如写严实一点代码啊? 为什么要用异常?

比如: 用户输入小于0的数字, 直接给个对话框,提示不能小于0不就OK了?  用得了,try{}、catch{}  finally   不?



------解决方案--------------------
这是增加健壮性 比如 为什么开车要买保险 谨慎点不就行了
------解决方案--------------------
好吧。有些异常了我不想让用户看到个500页面。。程序能继续跑呢。又或者说这个异常不影响后面的程序运行只不过我想日志打印呢。
------解决方案--------------------
你说的那个比如 其实是异常的烂用。
异常主要用来处理一些非正常的情况,比如 正连着数据库,可是数据库突然挂了。
------解决方案--------------------
有些异常是预知不到的,就像连接数据库,谁敢保证100%能够连接上去,预知不到的就要捕抓他,不让程序因为异常而中断,是一种异常保护机制
------解决方案--------------------
楼主考虑的不是很周全。因为不是所有情况都像直接给个对话框那么简单。
------解决方案--------------------
而且有些异常时你用的类库就抛出来的。。你要用要么捕获要么也继续抛。。这个不是你写的严谨就能控制的。
------解决方案--------------------
说实话,谁也不能保证万无一失。。即使是经验很丰富的程序员,也很难避免异常或者错误。。官方这么做是为了程序的稳定和健壮。
------解决方案--------------------
使用异常还可以把抛出异常的地方和捕获解决异常的地方分解开来,这是很重要的,因为抛出异常的程序员不一定知道应该如何解决异常
------解决方案--------------------
听说对软件进行穷举式的测试所需的时间是软件开发时间的数十数百倍,很多情况下不需要将所有问题都暴露出来,因为那样做几乎是不可能的,所以需要将多个已知和未知的问题丢进一个口袋统一处理。
比如当你看csdn论坛时,不论服务器维护,还是机房(及所有备份机房)海啸地震火山爆发了,又或者你的网线被小强啃了,其结果都是你无法登陆论坛了,这就是异常。此外还有一种叫错误(error),就是你连登陆论坛的机会都没有,因为你的浏览器打不开了。
------解决方案--------------------
举个简单例子,从用户角度来讲,当后台程序出现异常,用户并不想看到异常栈信息,用户也看不懂,但我们可以通过捕捉该异常,对用户友好提示。
------解决方案--------------------
吐槽前最好做好调查,异常不等于bug,异常处理和debug是两回事,另外一个程序不是一个人做的,一个程序员有可能并不知道当他遇到某个异常时,上层invoker要如何处理,所以他要做的只是通知上层他遇到了异常,由上层决定如何处理
------解决方案--------------------
看评论很精彩。

也想说说自己对异常的看法:
1. 异常通常用于扑捉意外的错误,也就是编码所不能控制的错误,比如说数据库出问题连接不上了,文件找不到了,或者如楼上所言地震、火山神马的。
2. 通过抛出异常,可以把同类问题汇拢到一起统一解决,这样代码就更精简了。
3. 通过看异常栈,方便层层跟踪错误。
4. 提高代码的可读性,让我们把异常处理代码和普通代码分开。
5. 异常见名知意,看信息很容易知道产生异常的原因。