精华帖 (0) :: 良好帖 (6) :: 新手帖 (13) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2010-08-24
showr 写道 一个方法的参数,C里面好像是一堆的if else判断参数是否合法,不合法就返回一个没有实际意义的值
但在java里面有异常机制,当参数不合法的时候,究竟是if else 一样判断后返回一个值 还是直接来个Exception ? 如果是 if else 的话,有什么好处 ? 如果是 exception 的话,又有什么好处 ? 或者是根据不同情况来定 ? 一次面试的题目,至今无解,求真相 if-else 方式的好处在于更贴近与逻辑思维,性能优于Exception。相对于Exception,其缺点是,不适合OOP,语义不明显,不易于错误错误跟踪或错误提示较少,并且类型比较单一(比如利用C语言的原生类型)或者难以统一(比如C语言结构和宏定义)。 exception方法的好处在于是业务逻辑和异常处理分离(代码相对清晰),try中处理业务,catch中处理异常情况。在API设计中,可以设计Exception Handler来处理异常,使得层次分明。同时,更好的OOP的封装和多态性。缺点在于性能相对差。 |
|
返回顶楼 | |
发表时间:2010-08-24
exception不要用来控制流程。。。
|
|
返回顶楼 | |
发表时间:2010-08-24
最后修改:2010-08-24
由性能来决定吧,最好用if else,控制尽可能多错误,不要是错误就往上抛
|
|
返回顶楼 | |
发表时间:2010-08-24
最后修改:2010-08-24
我觉得是看业务逻辑了,如果是要验证输入等的,可以if判断后,手工抛出IllegalXXXException,或者抛出自定义继承自RuntimeException的异常。比如在Spring的DataAccessUtils里面的singleResult()方法,就包含如下的代码。 if (results.size() > 1) { throw new IncorrectResultSizeDataAccessException(1, size); } 值得说明的是,这些都是RuntimeException。还有,对于那些必须显式抛出的Exception,例如SQLException、IOException等,写代码的时候,要么将其转换为RuntimeException,要么就显式抛出,到了最后的方法中处理,有可能还是抛出,就像Struts2的Action一样,抛出异常,自定义异常页面。 除了上面的情况,尽量使用if else判断。肤浅理解,不知正确与否。 |
|
返回顶楼 | |
发表时间:2010-08-24
根据情况来选择使用if...else,还是exception。选择的依据就是,你的方法的职责。也可以说是你方法的契约。
|
|
返回顶楼 | |
发表时间:2010-08-24
if-else 方式的好处在于更贴近与逻辑思维,性能优于Exception。相对于Exception,其缺点是,不适合OOP,语义不明显,不易于错误错误跟踪或错误提示较少,并且类型比较单一(比如利用C语言的原生类型)或者难以统一(比如C语言结构和宏定义)。
exception方法的好处在于是业务逻辑和异常处理分离(代码相对清晰),try中处理业务,catch中处理异常情况。在API设计中,可以设计Exception Handler来处理异常,使得层次分明。同时,更好的OOP的封装和多态性。缺点在于性能相对差。 |
|
返回顶楼 | |
发表时间:2010-08-24
这个看情况吧,有明确处理方式的,用if,如果没有明确怎么处理的,直接抛出exception终止运行,
至于RuntimeException和exception的选择,我觉得尽量用RuntimeException吧,但要在方法注释里说明什么情况下抛出的, exception带有很强的强制性,影响代码结构,除非你的代码带有很强的警告信息,否则一般不要用 |
|
返回顶楼 | |
发表时间:2010-08-24
如果是下面宋的代码
if(i==10){ this.saveError(request,"XXX"); return ERROR_PAGE; }else if(i==11){ this.saveError(request,"xxxxx"); return ERROR_PAGE; }else{ ...... return SUCCESS } 我会选择使用throw Exception 如 try{ if(i==10) throw new RuntimeException("XXXX"); if(i==11) throw new RuntimeException("xxxxx"); ...... return SUCCESS }catch(RuntimeException ex){ this.saveError(ex.getMessage); return ERROR_PAGE; } |
|
返回顶楼 | |
发表时间:2010-08-24
能用if-else搞定的就不要用异常了
|
|
返回顶楼 | |
发表时间:2010-08-24
最后修改:2010-08-24
sam_chi 说的很对,首先大家要明白什么是异常,异常就是程序不能正常执行,错误的调用api的方法,资源失败等等原因 。程序逻辑又是一回事。为什么要把异常和逻辑判断混合起来做对比? 补充一下如果,当参数不合法的时候抛出IllegalArgumentException .
如果是 if else 的话,有什么好处 ? 参数不合法程序都不能正常执行了那你说有啥好处? 如果是 exception 的话,又有什么好处 ? 面向对象的思维,抛出每个异常时可根据不同异常以不同方式进行处理 。缺点是创建消耗内存,效率低。 |
|
返回顶楼 | |