java return 与 throw 性能问题

xxxService.java
简单的一个小例子:
public UserVo login(@Params(length = 11) String phone, String password) {

User queryUser = new User();
queryUser.setPhone(phone);
queryUser.setPassword(MD5.getMD5Code(password));
User tempUser = userDao.selectOne(queryUser);
if(tempUser==null){
    throw new DataException(MessageEnum.PASSWORD.getCode(),MessageEnum.PASSWORD.getName());
}
return new UserVo(tempUser.getCode(),tempUser.getPhone());

}
原因:
这里我之所以用throw 是不想改变返回 的对象, 也是想让 异常统一处理器去处理返回 结果 ,也不想在controller 去判断 service 的业务处理是否正确 .要不然 controller里 就会出现 if(xxxService.login())return xxx; else return xxx;
问题:
1.这里是一个登录 校验 当出现 业务 错误 是 是用return 还是 用throw 自定义的异常好呢?
2.return 与 throw 哪个性能 更好 , 相差是多少?
3.使用throw这个选择是否正确 , 因为在实际 项目中 还没有遇见过这种处理方式 .
请指教指教 .
非常感谢.

最终结果:
首先谢谢各位的指教 .
小弟暂时还是采取了throw的方式,并且不进行fillInStackTrace().
原因:还是因为不用在controller中进行判断.感觉能比较方便一些.

阅读 5.6k
2 个回答
  1. 个人认为这里抛自定义的业务异常是可以的。

  2. 关于returnthrow哪个性能更好,理论上来说,抛出异常肯定是有性能损失的,创建一个Exception对象的最耗时的是调用fillInStackTrace方法,但是这个方法是可以通过传递参数来不调用的。更详细的可以参考http://stackoverflow.com/ques...

  1. 异常应该真正用于异常情况,输入错误的账号密码完全是正常的业务,就不应该抛出异常,而是根据方法返回相关信息。

  2. 还有,异常效率低,这点毋庸置疑。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题