java , 使用try catch return 还是if return 来退出程序
我从web端传到后台几个参数a,b,c然后需要进行转换。既然是转换,那就有可能出现异常。比如:我需要Integer.parseInt(a);Double.parseDou...
我从web端传到后台几个参数 a,b,c 然后需要进行转换。既然是转换,那就有可能出现异常。
比如 : 我需要 Integer.parseInt(a); Double.parseDouble(b); c.toString;
我想到两种方式来处理异常:
采用正则先校验一遍,即:
if(!Int正则校验a){提示不能转换Int; return;}
if(!Double正则校验a){提示不能转换成Double; return;}
if(c==null){提示null不能ToString;return}
采用try catch
try {
Integer.parseInt(a); Double.parseDouble(b); c.toString;
}catch(Exception e){
提示输入有误;
return;
}
或者具体点:
try{
Integer.parseInt(a); Double.parseDouble(b); c.toString;
}catch(NumberFormatException){
提示错误;
return;
}catch(NullPointorException){
提示字符串错误;
return;
}
问题:
单个try catch 和单个if比较 肯定if效率高,但是使用if会导致每次必然回去判断一下 综合考虑,当参数数量达到10个20个...的时候,怎么分析效率问题(是根据出错的概率吗)
效率和代码简洁可读,怎么权衡。我可以用最高层的Exception 来进行一次捕获或者写10个if return.
关于效率问题,我觉得 1ms和10ms的差距虽然是10倍,但是从用户使用角度考虑,差距应该是不大的,但我在网上搜了好久,都说使用if 预先判断,到底是基于什么考虑的? 展开
比如 : 我需要 Integer.parseInt(a); Double.parseDouble(b); c.toString;
我想到两种方式来处理异常:
采用正则先校验一遍,即:
if(!Int正则校验a){提示不能转换Int; return;}
if(!Double正则校验a){提示不能转换成Double; return;}
if(c==null){提示null不能ToString;return}
采用try catch
try {
Integer.parseInt(a); Double.parseDouble(b); c.toString;
}catch(Exception e){
提示输入有误;
return;
}
或者具体点:
try{
Integer.parseInt(a); Double.parseDouble(b); c.toString;
}catch(NumberFormatException){
提示错误;
return;
}catch(NullPointorException){
提示字符串错误;
return;
}
问题:
单个try catch 和单个if比较 肯定if效率高,但是使用if会导致每次必然回去判断一下 综合考虑,当参数数量达到10个20个...的时候,怎么分析效率问题(是根据出错的概率吗)
效率和代码简洁可读,怎么权衡。我可以用最高层的Exception 来进行一次捕获或者写10个if return.
关于效率问题,我觉得 1ms和10ms的差距虽然是10倍,但是从用户使用角度考虑,差距应该是不大的,但我在网上搜了好久,都说使用if 预先判断,到底是基于什么考虑的? 展开
3个回答
展开全部
计算机执行的速度很快的,对用户而言没什么区别。我觉得try catch走的路线和if走的路线都是一样的,都是一旦异常就return了。基于if的校验用的多我估计是复杂场景的判断, 比如判断这个字符串是否是电话号码。 这样的场景你用try catch的话,里面还是要写if,是吧?
基于简单的类型转换,我觉得用try catch就可以了。如果你觉得这么多个return影响阅读的话,可以这么写:
String result = "OK";
try{
Integer.parseInt(a); Double.parseDouble(b); c.toString;
}catch(NumberFormatException e){
result = "number format error";
}catch(NullPointorException){
result = "param is null";
}
if(!"OK".equals(result)){
return;//这里统一return
}
基于简单的类型转换,我觉得用try catch就可以了。如果你觉得这么多个return影响阅读的话,可以这么写:
String result = "OK";
try{
Integer.parseInt(a); Double.parseDouble(b); c.toString;
}catch(NumberFormatException e){
result = "number format error";
}catch(NullPointorException){
result = "param is null";
}
if(!"OK".equals(result)){
return;//这里统一return
}
展开全部
对比最好的方法就是尝试将测试的数据量加大,显然如果加大的话是if效率高,因为比方10W个参数传进来你用try,catch的话每次都去父类查找然后才抛出异常,这样的话效率就会非常低,因为他引用了对象,但是if判断就不会,因为他并未引用任何对象
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果能判断的还是先判断好的
毕竟抛出异常不如判断效率高。
毕竟抛出异常不如判断效率高。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询