将所有内容包含在一个try-catch中是一个好主意

时间:2016-01-12 19:40:29

标签: java try-catch

我正在使用java,我的代码中的所有异常都是从java.lang.exception派生的。将所有东西都包含在一个try-catch中是一个好主意吗?为每个困难的函数添加try-catch是个好主意吗?

因为我想让我的代码以懒惰的方式运行得更好,这意味着没有异常会导致我的程序崩溃,例如,捕获IndexOutOfBoundsException,ArrayIndexOutOfBoundsException,SQLGrammarException ......

以下是我的代码:

public MyResult function1(){
    MyResult myResult = new MyResult();
    try{
        //all codes here
    }catch(Exception e){
        LOGGER.error(e);
        myResult.setException(e);
    }finally{
        return myResult;
    }
}

//more same functions using same try-catch here

public MyResult functionN(){
    MyResult myResult = new MyResult();
    try{
        //all codes here
    }catch(Exception e){
        LOGGER.error(e);
        myResult.setException(e);
    }finally{
        return myResult;
    }
}

2 个答案:

答案 0 :(得分:6)

  

我的代码中的所有异常都来自java.lang.Exception

这可能不是一个好主意,因为需要从java.lang.RuntimeException定义一类异常 - 即表示编程错误的异常,即需要更改程序以便修复的情况

  

将所有内容都包含在一个try-catch中是否是一个好主意?

不,不是。您应该根据需要添加try / catch,将它们放在可能抛出它们的代码块周围,并且仅在代码准备以某种有意义的方式处理异常的情况下。

  

为每个困难的函数添加try-catch是个好主意吗?

您不应将try / catch放在不知道如何处理异常的方法中。更好的方法是让异常进入调用链,直到它遇到准备处理异常的方法。

在某些情况下,此类方法位于调用链的最顶层,在这种情况下,该方法通常会记录并退出或返回错误状态。

答案 1 :(得分:3)

因此。基本上,您应该将HORIZON_CONFIG = { 'customization_module': 'some_path.overrides', } / class YourCreateImageForm(CreateImageForm): ... form_class = project_forms.YourCreateImageForm 放在可能引发异常的代码部分周围。这将使您的代码更好地构建,并提高可读性。

就个人而言,我不是使用try的忠实粉丝。如果其他人读取您的代码,他将不知道可能发生的异常。我认为只使用可能在catch块中抛出的异常更好。