1

我可以以某种方式在方法中包含这段代码吗

        if (!printStackTrace_printed) {
            ex.printStackTrace();
            printStackTrace_printed=true;
        }
        logStoreException(ex);
        throw new Exception(ex.getMessage());

并在每个 catch 块内调用它并传递正确的参数exnpe

    catch (RationalTestException ex) {
        if (!printStackTrace_printed) {
            ex.printStackTrace();
            printStackTrace_printed=true;
        }
        logStoreException(ex);
        throw new Exception(ex.getMessage());

    } 
    catch (NullPointerException npe) {
        if (!printStackTrace_printed) {
            npe.printStackTrace();
            printStackTrace_printed=true;
        }
        logStoreException(npe);
        throw new Exception(npe.getMessage());

    }   
    catch (Exception ex) {
        if (!printStackTrace_printed) {
            ex.printStackTrace();
            printStackTrace_printed=true;
        }
        logStoreException(ex);
        throw new Exception(ex.getMessage());
    } 
4

2 回答 2

3

由于您Exception在最后一个 catch 中进行捕获,并且所有 catch 块都是相同的,因此您可以完全删除其他两个 catch 块而不会影响程序。

它没有任何区别的原因是它NullPointerException是 的子类Exception,因此捕获Exception也将捕获NullPointerException以及在 try 块中抛出的任何其他异常。


请注意,一般来说,捕获Exception被认为是一种反模式,除非在服务器调用的最顶层。

于 2012-11-25T23:35:31.200 回答
0

您只能输入其中一个 catch 块,而不是全部,因此您根本不需要 'printStackTrace_printed' 布尔值。通常捕获一个异常并抛出另一个异常也是不好的做法,但是如果您有理由这样做,您只需要捕获异常,而不是其他两个。所以你的问题大部分都消失了。

于 2012-11-26T03:20:59.007 回答