锁定老帖子 主题:关于异常的处理以及相关设计
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-12-27
异常是接口的一个约定,相比起返回值的方式,异常具有更加明确的业务含义。
返回值只是一种强制的约定,业务含义是含糊的,异常是非常明确的。 比如: interface Person { Age getAge() throws AskLadyException; } 这样的接口设计,意义就很明确。返回null表示“我不知道”,抛出异常表示“你不该问”。 |
|
返回顶楼 | |
发表时间:2006-12-27
楼上的说的很好。我一直想说这些,但是我表达不出来
受教了。 |
|
返回顶楼 | |
发表时间:2006-12-28
出了错就抛runtime,一般不要用返回值,否则会很ym的
可能出错就throws runtime (具体如lane_cn所言) 最重要的一点就是不要淹没异常,对于check的你可以rethrow(因为俺讨厌异常链,到后面不仅冗长,而且根本就没什么主义了) 异常style可参考http://www.javalobby.org/java/forums/t82979.html |
|
返回顶楼 | |
发表时间:2006-12-28
可以定义一个自定义异常类(extends Exception),在程序中将异常一层一层的抛到最顶层再处理.
|
|
返回顶楼 | |
发表时间:2007-03-07
看看spring中的异常处理
|
|
返回顶楼 | |
发表时间:2007-03-08
baidu一下 关于异常的争论--要检查,还是不要检查?
|
|
返回顶楼 | |
发表时间:2007-03-08
昨天看到的一个:
To me, code looks a lot easier to read with: - braces on its own line, opening and closing braces aligned. - declare local variables as late as possible, keeping it in an as local scope as possible. - write member variables differently as local variables. Be consistent. Write like this and everything looks fantastic. I'm repeatedly stunned at how people write code. try { BufferedReader reader = new BufferedReader(new FileReader(file)); try { doStuffWithFile(file); } finally { reader.close(); } } catch (IOException ex) { System.out.println("Error writing to file " + file); } BufferedReader reader = null; try { reader = new BufferedReader(new FileReader(file)); } catch (IOException ex) { System.out.println("Error opening file " + file); return; } try { doStuffWithFile(file); } catch (IOException ex) { System.out.println("Error do stuff with file " + file); try { reader.close(); reader = null; } catch (IOException ex) { System.out.println("Error closing file " + file); } } if (reader != null) { try { reader.close(); reader = null; } catch (IOException ex) { System.out.println("Error closing file " + file); } } Oh my god, what the crap. But this is what I see over and over. |
|
返回顶楼 | |
发表时间:2007-03-08
我不同意出错就抛unchecked Exception(RuntimeException),对于业务类型的异常,比如UserLoginException,应该显式的高速上层他可能要抛出这个异常,比如:
interface UserLoginService { public void login(String name,String pass) throws UserLoginException; } 这样Action就提醒Action,他抛出的异常,Action应当捕获这个异常,它描述的是“例外”而不是一个错误 |
|
返回顶楼 | |
发表时间:2007-07-28
我不太赞成将一些例外都设计成异常, 我认为异常还是要尽量少使用. 因为抛出异常会使程序流程有巨大改变导致性能上的损失.
异常分为 Exception, RuntimeException. RuntimeException 不需要显示地 checked. 像这样的地方, 我更倾向于在object.xxxx 的时候 自动让系统底层将此异常抛出. 而不需要自己来检测这个object 是否是个null 引用. if(object == null) threws new NullPointerExcction("对象不应该为空"); 如果规范里有明确的说明异常设计原则, 那自然应该遵守规范里的. 如果没有. 那么就应该自己来设计了. 关于login, 因为最开始我说了倾向于不设计异常. 而使用结果的形式来告诉调用者发生了什么事情. 那我更喜欢用返回值来说明问题. 如果返回值无法足够表述清楚. 那就用异常. 像login的结果, 成功,失败,而失败有好多种情况,用户名不对,密码不对, 已在线, 或因其他原因不允许登录. 这些是正常的应用结果. 不属于程序错误, 那就应该显示告诉调用者, 或者说显示将此方法的异常做为接口说明清楚, 那么抛出的异常应该继承自Exception. 这样login方法签名里需要显示将这些Exception的子类. 用throws 关键字说明清楚. 那什么时候抛出RuntimeException 呢? 相反, 很多情况下不需要用RuntimeException. 我的理解是一个设计良好的程序, 不应该被RuntimeException 给打断执行. 个人想法仅供参考 |
|
返回顶楼 | |
发表时间:2007-07-29
J2ee design and development -rod johnson
chapter 4, Exception Handling – Checked or Unchecked Exceptions |
|
返回顶楼 | |