论坛首页 Java企业应用论坛

面试题:用Exception异常还是if判断

浏览 34234 次
精华帖 (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的封装和多态性。缺点在于性能相对差。
1 请登录后投票
   发表时间:2010-08-24  
exception不要用来控制流程。。。
0 请登录后投票
   发表时间:2010-08-24   最后修改:2010-08-24
由性能来决定吧,最好用if else,控制尽可能多错误,不要是错误就往上抛
0 请登录后投票
   发表时间: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判断。肤浅理解,不知正确与否。

0 请登录后投票
   发表时间:2010-08-24  
根据情况来选择使用if...else,还是exception。选择的依据就是,你的方法的职责。也可以说是你方法的契约。
0 请登录后投票
   发表时间:2010-08-24  
if-else 方式的好处在于更贴近与逻辑思维,性能优于Exception。相对于Exception,其缺点是,不适合OOP,语义不明显,不易于错误错误跟踪或错误提示较少,并且类型比较单一(比如利用C语言的原生类型)或者难以统一(比如C语言结构和宏定义)。

exception方法的好处在于是业务逻辑和异常处理分离(代码相对清晰),try中处理业务,catch中处理异常情况。在API设计中,可以设计Exception Handler来处理异常,使得层次分明。同时,更好的OOP的封装和多态性。缺点在于性能相对差。
1 请登录后投票
   发表时间:2010-08-24  
这个看情况吧,有明确处理方式的,用if,如果没有明确怎么处理的,直接抛出exception终止运行,
至于RuntimeException和exception的选择,我觉得尽量用RuntimeException吧,但要在方法注释里说明什么情况下抛出的,
exception带有很强的强制性,影响代码结构,除非你的代码带有很强的警告信息,否则一般不要用
0 请登录后投票
   发表时间: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;
  }
0 请登录后投票
   发表时间:2010-08-24  
能用if-else搞定的就不要用异常了
0 请登录后投票
   发表时间:2010-08-24   最后修改:2010-08-24
sam_chi 说的很对,首先大家要明白什么是异常,异常就是程序不能正常执行,错误的调用api的方法,资源失败等等原因 。程序逻辑又是一回事。为什么要把异常和逻辑判断混合起来做对比?  补充一下如果,当参数不合法的时候抛出IllegalArgumentException .
如果是 if else 的话,有什么好处 ?
参数不合法程序都不能正常执行了那你说有啥好处?
如果是 exception 的话,又有什么好处 ?
面向对象的思维,抛出每个异常时可根据不同异常以不同方式进行处理 。缺点是创建消耗内存,效率低。
1 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics