论坛首页 Java企业应用论坛

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

浏览 34370 次
精华帖 (0) :: 良好帖 (6) :: 新手帖 (13) :: 隐藏帖 (1)
作者 正文
   发表时间:2010-08-25  
业务流程分 流程A和流程B,如果 A和B 发生的概率都是50%,那么最好用if-else

如果A和B 发生的概率 一个是主流程 发生的概率90%以上,那么B流程如果想判断的话用exception比较好,比如 用户登录,用户名密码错误不会时时刻刻发生,那么抛出异常会比较好,本来发生的几率不大,性能方面不用过多考虑
0 请登录后投票
   发表时间:2010-08-25  
rocwon 写道
异常是给所不能预料到的错误而准备的解决方案,不是用来取代正常的判断的。

应该是这样的,但是要注意在不使用exception的情况下,你应该返回一个关于执行结果的消息,使得调用者能够根据这个消息来判定执行的成功与否。
0 请登录后投票
   发表时间:2010-08-25  
Exception 允许你将不太容易处理的问题 交给调用者,而不是自己处理
0 请登录后投票
   发表时间:2010-08-25  
jackerxff 写道
Exception 允许你将不太容易处理的问题 交给调用者,而不是自己处理

这确实是很大的优点,其附带的优点是方法签名可以简单一些
0 请登录后投票
   发表时间:2010-08-25  
我也迷糊,
举个例子,NullPointException,IO流中读完会返回-1,
避免使用异常处理实现程序流程的改变。
0 请登录后投票
   发表时间:2010-08-25  
wpfwupengfeiwpf 写道
呵呵,个人喜欢用if else 这样可以给用户更好的提示,throw难道要抛出异常给用户看


异常你也是需要封装的
0 请登录后投票
   发表时间:2010-08-25   最后修改:2010-08-25
N年前关注过肉饼饭的帖子,大家有空可以搜下
这段时间用下来说下使用体验

Exception  JDK1.0产物
IF-ELSE    JDK1.0产物
Assert     JDK1.4产物

当时写API的时候估计是这样的
先有前两者,因为注重OO,所以在try ..catch中
try代码块里负责主要逻辑,catch负责与主要逻辑以外的部分

比如
try{
  //吃饭
  //吃什么,去哪里吃,怎么吃
}catch(... e){
  //抛出没有人的异常
}


而IF-ELSE是对于主要逻辑的判断

try{
  //还是吃饭
  
  //1st condition
  //if(sth.equals("面")){
  //  ...
  //}
  
  //2nd condition
  //if(sth.equals("小吃")){
  //  ...
  //} else {
  //  ...
  //}
  
  //3rd condition
  //if(sth.equals("小龙虾")){
  //  return ...;
  //} 
  //return ...;

}catch(... e){
  //抛出没有人的异常
}


经历了岁月的变迁JDK也长大成v1.4

Assert出现,出现的原由可能是认为Exception不该处理一些与jdk非关的操作
所以在主要逻辑前加如Assert去判断不该出现的情况,而这些情况应该是帮助开发人员,
避免一些重复劳动,同时让开发人员在今后的开发中可以先关注主要业务代码,
到需要优化的时候有比较清晰的层次

之后Exception承担的责任就轻了,主要负责系统引起的不可恢复异常
0 请登录后投票
   发表时间:2010-08-25  
bluemusic 写道
N年前关注过肉饼饭的帖子,大家有空可以搜下
这段时间用下来说下使用体验

Exception  JDK1.0产物
IF-ELSE    JDK1.0产物
Assert     JDK1.4产物

当时写API的时候估计是这样的
先有前两者,因为注重OO,所以在try ..catch中
try代码块里负责主要逻辑,catch负责与主要逻辑以外的部分

比如
try{
  //吃饭
  //吃什么,去哪里吃,怎么吃
}catch(... e){
  //抛出没有人的异常
}


而IF-ELSE是对于主要逻辑的判断

try{
  //还是吃饭
  
  //1st condition
  //if(sth.equals("面")){
  //  ...
  //}
  
  //2nd condition
  //if(sth.equals("小吃")){
  //  ...
  //} else {
  //  ...
  //}
  
  //3rd condition
  //if(sth.equals("小龙虾")){
  //  return ...;
  //} 
  //return ...;

}catch(... e){
  //抛出没有人的异常
}


经历了岁月的变迁JDK也长大成v1.4

Assert出现,出现的原由可能是认为Exception不该处理一些与jdk非关的操作
所以在主要逻辑前加如Assert去判断不该出现的情况,而这些情况应该是帮助开发人员,
避免一些重复劳动,同时让开发人员在今后的开发中可以先关注主要业务代码,
到需要优化的时候有比较清晰的层次

之后Exception承担的责任就轻了,主要负责系统引起的不可恢复异常

需要传送门
肉饼饭只有作法...没有博克
0 请登录后投票
   发表时间:2010-08-25  
涉及正常流程控制的用if,其他的用异常
0 请登录后投票
   发表时间:2010-08-25   最后修改:2010-08-25
取决于方法在那一层的,如果是在Action里,肯定不能抛异常!要把错误信息反馈给用户,让用户重新进行填写!

但是Service层为了保证数据完整性,业务流程正常肯定是要抛异常的!

抛出异常的描述要稍微详细点,做到看到异常信息就能知道哪里出错了!

这样对开发和以后的维护都很有帮助
0 请登录后投票
论坛首页 Java企业应用版

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