哪种是异常处理的最佳实践:在内层捕获异常v / s在顶层捕获异常一次

时间:2015-10-08 09:36:06

标签: java exception exception-handling

在内层捕获异常:

if (type.equals("A")) {
    try {
        //some code
    } catch (JSONException e) {
        LOGGER.error("Parsing Exception. Caused By: ", e);
    }
} else if (type.equals("B")) {
    try {
        //some code
    } catch (JSONException e) {
        LOGGER.error("Parsing Exception. Caused By: ", e);
    }
} else if (type.equals("C")) {
    try {
        //some code
    } catch (JSONException e) {
        LOGGER.error("Parsing Exception. Caused By: ", e);
    }
}

或捕获异常一次:

try {
        if (type.equals("A")) {
            //some code
        } else if (type.equals("B")) {
            //some code
        } else if (type.equals("C")) {
            //some code
        }
    } |
    catch (JSONException e) {
        LOGGER.error("Parsing Exception. Caused By: ", e);
    }
    }

3 个答案:

答案 0 :(得分:0)

只有执行条件的可能性。因为你只捕获一个只有一个try-catch的特定异常就可以了。保留第二个片段。

答案 1 :(得分:0)

如果你想捕获一个异常而你想在catch块中执行同一组语句,那么可以捕获一次。

但是如果你想要捕获几个不同的异常或者对不同的语句以不同的方式处理相同的异常,那么你应该创建多个catch块。

答案 2 :(得分:0)

显然,第二种方法符合DRY principle并且是推荐的。但是,理想情况下,如果可以从中恢复,则应该只捕获异常。

如果你想要的只是记录它们,那么最好让这段代码尽可能地高于调用链。浏览日志并查看多次记录的同一异常并不好玩,只会使调试和维护变得更加困难。