论坛首页 Java企业应用论坛

异常应该如何使用?

浏览 6612 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-03-29  
请问异常该如何被正确的使用,如下面的代码,哪一种比较合理?
public User getUser(long id); {
    return userDao.getUser(id);;
}

public User getUser(long id); throws UserNotFoundException {
    User user = userDao.getUser(id);;
    if (user == null);
        throw new UserNotFoundException("...");;
    return user;
}
   发表时间:2005-03-29  
在调用getuser方法时候要catch UserNotFoundException 并做相应处理。
0 请登录后投票
   发表时间:2005-03-30  
那跟调用getuser方法时候判断user是否为null,再做相应处理有什么区别呢?
0 请登录后投票
   发表时间:2005-03-30  
功能上没什么区别,一个只不过在方法里抛一个自定义的Exception,然后你可以在里面写一点信息,提示是什么错误之类,还有一个就是在使用这个方法时候判。自定义Exception本来就是根据需要自己写的,你完全可以不用,一般可以写个基类Exception,实现一些公用的功能,其他的Exception继承这个鸡肋。
0 请登录后投票
   发表时间:2005-03-30  
z_jordon 写道
请问异常该如何被正确的使用,如下面的代码,哪一种比较合理?
public User getUser(long id); throws UserNotFoundException {
    User user = userDao.getUser(id);;
    if (user == null);
        throw new UserNotFoundException("...");;
    return user;
}

如果你上面的代码是在业务层里面的,那么UserNotFoundException,我觉得是业务相关的异常,所以在此throw没什么问题。
0 请登录后投票
   发表时间:2005-03-30  
异常说得是在当前的语义环境下,出现了没有预料的错误。
在根据用户ID获取用户对象的语义下,用户不存在实际上可以看成没有预料的错误。抛出异常比较恰当。


ps:看看下边的讨论。http://forum.hibernate.org.cn/viewtopic.php?p=9544&highlight=
0 请登录后投票
   发表时间:2005-03-30  
谢谢楼上的,我是用"异常"这个关键字来搜的,所以没搜到这些贴子。
0 请登录后投票
   发表时间:2005-03-30  
这里好像不支持中文搜索。
0 请登录后投票
   发表时间:2005-04-01  
z_jordon 写道
请问异常该如何被正确的使用,如下面的代码,哪一种比较合理?
public User getUser(long id); {
    return userDao.getUser(id);;
}

public User getUser(long id); throws UserNotFoundException {
    User user = userDao.getUser(id);;
    if (user == null);
        throw new UserNotFoundException("...");;
    return user;
}


看你的代码在数据层的,应该使用第一段。

异常处理规则
1、只有在出现异常时才使用异常2、如无必要不要创建自己的Exception
3、不要用Exception来作流程控制4、不要轻易的忽略捕获的Exception
5、不要简单地捕获顶层的Exception
0 请登录后投票
   发表时间:2005-04-01  
dohkoos 写道
z_jordon 写道
请问异常该如何被正确的使用,如下面的代码,哪一种比较合理?
public User getUser(long id); {
    return userDao.getUser(id);;
}

public User getUser(long id); throws UserNotFoundException {
    User user = userDao.getUser(id);;
    if (user == null);
        throw new UserNotFoundException("...");;
    return user;
}


看你的代码在数据层的,应该使用第一段。

异常处理规则
1、只有在出现异常时才使用异常2、如无必要不要创建自己的Exception
3、不要用Exception来作流程控制4、不要轻易的忽略捕获的Exception
5、不要简单地捕获顶层的Exception



所以啊,有必要翻翻  http://forum.hibernate.org.cn/viewtopic.php?p=9544&highlight=

当然,我是同意你的观点的。 因为一旦使用exception做这样的处理,那么客户端很可能就可能需要catch许多的exception。容易造成客户端程序员直接就是Catch一个基类exception,导致出错原因都未知,然后适当的状态回退都忘了。 这就不是编程风格、程序速度的问题了,而是程序正确性的问题。

但是,使用返回值的时候有一点问题, 编译器不会强行“客户端捕捉返回值”,也容易造成客户端程序员忽略那些null的返回值。唉~~
0 请登录后投票
论坛首页 Java企业应用版

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