"取消嵌套"我在Java中的Try / Catch块

时间:2014-04-30 21:06:12

标签: java nested try-catch

在我努力学习和更好地理解Java的过程中,我被告知,保持我的代码嵌套通常是一种不好的做法,如下所示。我的问题是如何才能使它在执行相同功能的同时使其更容易阅读。谢谢!

class Test {
    public static void main(String[] args) {
        try {
            int zero = 0;
            int y = 2/zero;
            try {
                Object s = null;
                System.out.println(s.toString());
            }
            catch(NullPointerException e) {
                System.out.println(e);
            }
        }
        catch(ArithmeticException e) {
            System.out.println(e);
        }
    }
}

3 个答案:

答案 0 :(得分:1)

例如,您可以像这样写一个try

try {
    int zero = 0;
    int y = 2/zero;

    Object s = null;
    System.out.println(s.toString());
} catch(NullPointerException e) {
    System.out.println(e);
} catch(ArithmeticException e) {
    System.out.println(e);
}

这当然更具可读性,但它并不是更好。这取决于您的用例。

你不能这样做

try {
    int zero = 0;
    int y = 2/zero;

    Object s = null;
    try {            
        System.out.println(s.toString());
    } catch(NullPointerException e) {
        System.out.println("'s' was null, creating a new 's'");
        s = new Object();
    }
    System.out.println(s.toString());

} catch(ArithmeticException e) {
    System.out.println(e);
}

答案 1 :(得分:0)

这一切都取决于你想要捕获错误的位置。如果要在1个catch块中捕获2种不同的异常,请使用|运算符。

try {

}catch(NullPointerException | ArithmeticException e) {

}

如果您想要2个不同的捕获块,只需添加另一个

try {

}catch(NullPointerException npe) {

}catch(ArithmeticException ae) {

}

对于抛出异常的方法/实例,或者如果选择抛出新异常,必须使用try / catch包围。 但这一切都取决于你想要捕获错误的位置。抛出异常时,将跳过在抛出异常之后的try块中的所有代码,并且连接到该try块的catch块将触发

答案 2 :(得分:0)

您可以在单个try语句的末尾添加多个catch语句,例如

catch(NullPointerException e) {
            System.out.println(e);
        }

catch(ArithmeticException e) {
        System.out.println(e);
       }

而不是在另一个try / catch中使用try / catch