对于try-catch处理“被检查异常”实际应用的反思

最近在书写代码的时候对于代码中的异常处理进行了一些思考

目前基于网页开发大多数前台都有关于数据类型的校验处理,如不给输入数字等等,也过滤一些异常,这里说的是基于系统中一些不用网页输入所导致的一些错误

对于异常处理分为几类:

1、如系统中某些流程需要批量倒入模板,如出现错误需要提示
2、系统中某些集成错误
3、系统中的未知错误


针对情况1:

如果用try-catch块经行异常处理你可能会觉得很累,因为用户往往想一次性把所有的异常获知,而不是一条条的异常经行处理

如:每个字段处理的异常条件都不一样

public class MyTest1 {
public String f1(){
StringBuilder errorMessage = new StringBuilder();
try{
//检查字段1
throw new Exception();
}catch(Exception1 e){
errorMessage.append("errorMessage1");
}

try{
//检查字段2
throw new Exception();
}catch(Exception2 e){
errorMessage.append("errorMessage2");
}


try{
//检查字段3
throw new Exception();
}catch(Exception3 e){
errorMessage.append("errorMessage3");
}
return errorMessage.toString();
}

public String f2(){
StringBuilder errorMessage = new StringBuilder();
int i = 1;
if(i==1){   //条件1
errorMessage.append("errorMessage1");
}
if(i==1){   //条件2
errorMessage.append("errorMessage2");
}
if(i==1){   //条件3
errorMessage.append("errorMessage3");
}
return errorMessage.toString();
}
}


对比f1()和f2()是不是感觉f2() 这种处理异常的方式比较简便好维护

其实JAVA “被检查异常” 设计的初衷是方便异常处理的代码书写,但是如果用户一次性知道并处理这些异常,好像这个机制并不大适用,而是用逻辑处理并独立出方法更为清晰


而针对二三种情况而言:

由于系统出现异常并不是用户可以处理的异常,程序终止并告诉用户,这种机制就非常清晰,这种机制处理一些递进式的错误更有优势,

如一个方法,做了三件事

1、创建了一个A类

2、在A类中新建一个变量

3、用该变量进行计算


try-catch块错误1、错误2、错误3 分别对应三件事的异常,这是如果出现异常返回用户在那一步出现了异常也非常合理,因为这些步骤是连锁的

错误就非常清晰了,如果用逻辑判断会产生大量的if-else,错误处理块也隐藏在else块代码,维护起来非常困难


如:


public class MyTest1 {
public static void main(String[] argr){

}


private static void f1(){
try{
//步骤1
//步骤2
//步骤3
}catch(Exception1 e){
//处理错误1
}catch(Exception2 e){
//处理错误2
}catch(Exception3 e){
//处理错误3
}
}

private static void f2(){
StringBuilder errorMessage = new StringBuilder();
int i = 1;
if(i==1){   //条件1
//处理错误1
}else{
if(i==1){   //条件2
if(i==1){   //条件3
errorMessage.append("errorMessage3");
}else{
//处理错误2
}
}else{
//处理错误3
}
}
}
}


像f1()不用考虑各步骤中出现的异常,可以一直往下书写,异常处理集中在catch块处理,结构非常清晰,代码维护非常方便

前提是各步骤要抛出相应的异常,否则只返回成功/失败的消息还需要手动写if块抛出异常,如何不返回消息出现反法内“吞噬”异常或者直接抛出到main()

而不告诉用户,就是一种程序的“作弊”行为,本人比较偏向于第一种方式,是一种很好的代码风格


结论:
1、业务上需要一次行获取所有异常,并由用户能处理的异常,一般采取代码正常的逻辑处理
2、系统异常,需要协同处理的异常或者系统的异常,需要停止下面步骤的异常 一般使用(try-catch)处理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值