论坛首页 编程语言技术论坛

有效使用Java异常

浏览 9215 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-10-26   最后修改:2012-10-28
  Java的异常机制是一大优点,可以快速定位错误。但在实际开发中,往往嫌麻烦,一概对这些Exception抓起然后printStackTrace(),也没有更多的应用。
  我们经常进行逻辑判断,例如传入的参数表示一个类型,我们会这样
public Cake makeCake(int type) {
  
  if (type == Cake.HELLO) {
    cake = a hello cake;
  } else if (type == cake.WORLD) {
    cake = a world cake;
  } else {
    // 假设程序只能做两种蛋糕,这里你会做什么,是这样吗?
    log.debug("cake type error");
    return null;
  }
  
  return cake;
}

  这里完全可以自己throw一个exception并且附上错误信息,远比打出日志然后返回一个null感觉舒畅。
  throw new IllegalArgumentException("cake type error");

  甚至可以自己定义异常,增加或重载一些方法。

  附图简单介绍一下异常类架构,所有的checked异常都是需要显示catch的,而unchecked则不需要,例如RuntimeException。常见的异常

edit v0.1:
lingceng 写道
Shen.Yiyang 写道
组件、工具类部分应该尽量抛出异常;业务部分依据下层组件抛出的异常控制流程,但是尽量不要在多个地方来控制流程

嗯,有道理,不同类型,处理方式不一样。如果是在业务层,这里就应该会像freezingsky说的,用条件判断。


  • 大小: 25.5 KB
   发表时间:2012-10-26  
如果方法的调用方,可以正确处理,甚至是必须要处理类似参数错误的情况.那么自定义一个异常的确是比返回null更好。毕竟异常的表达能力比返回值要强得多。

但如果只是一个非常简单的处理(比如就两种情况,返回null或者不返回null),那么不用异常也说的过去,毕竟代码更简单。
0 请登录后投票
   发表时间:2012-10-26  
组件、工具类部分应该尽量抛出异常;
业务部分依据下层组件抛出的异常控制流程,但是尽量不要在多个地方来控制流程,应该固定在某一层完成;
就比较清晰了
1 请登录后投票
   发表时间:2012-10-27  
javaeye越来越萧条了 唉
0 请登录后投票
   发表时间:2012-10-27  
哎,开发的时候,谁还会注意这个呢,你们说,对吗,呵呵
0 请登录后投票
   发表时间:2012-10-27  
如果可以预判,宁愿用多二个判断语句,而不是采用Exception。除非,预判的数量较多,或者是基于某种可读性之类的。
0 请登录后投票
   发表时间:2012-10-27  
对流程没有影响的异常,只需要记录日志,不需要上抛异常。 异常不是到处都用来抛的
0 请登录后投票
   发表时间:2012-10-27  
Shen.Yiyang 写道
组件、工具类部分应该尽量抛出异常;业务部分依据下层组件抛出的异常控制流程,但是尽量不要在多个地方来控制流程

嗯,有道理,不同类型,处理方式不一样。如果是在业务层,这里就应该会像freezingsky说的,用条件判断。

0 请登录后投票
   发表时间:2012-10-27  
看程序的定位,如果作为lib,工具库的话,异常肯定是要抛的

在一个应用里面,有抛异常的地方,就必须有捕获异常的地方

异常也要分层设置
0 请登录后投票
   发表时间:2012-10-28  
不是一直抛到表示层进行集中处理的么?
0 请登录后投票
论坛首页 编程语言技术版

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