&引用;“取消嵌套”;Java中的Try/Catch块

&引用;“取消嵌套”;Java中的Try/Catch块,java,nested,try-catch,Java,Nested,Try Catch,在我学习和更好地理解Java的过程中,有人告诉我,让代码像下面那样嵌套通常是一种不好的做法。我的问题是如何使它执行相同的功能,同时使它更易于阅读。谢谢 class Test { public static void main(String[] args) { try { int zero = 0; int y = 2/zero; try { Object s = nul

在我学习和更好地理解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);
        }
    }
}

这完全取决于你想在哪里捕捉错误。如果要在一个catch块中捕获两种不同类型的异常,请使用
操作符

try {

}catch(NullPointerException | ArithmeticException e) {

}
如果您想要两个不同的捕捉块,只需添加另一个

try {

}catch(NullPointerException npe) {

}catch(ArithmeticException ae) {

}
对于引发异常的方法/实例,或者如果选择引发新异常,则必须使用try/catch。
但这完全取决于你想在哪里捕捉错误。当抛出异常时,将跳过抛出异常后的try块中的所有代码,并且连接到该try块的catch块将触发

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

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

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

例如,您可以通过这样编写来删除一个try/catch,而不是在另一个try/catch中包含一个try/catch

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);
}

你为什么不贴一个你觉得嵌套太深的实际例子呢。重构无用的代码是非常困难的pointless@VBCPP这是正确的。在某些情况下,您可能必须进行嵌套,或者有时只编写多个单独的try-catch。伪代码不会帮助我们帮助您,而且您关于嵌套try块的假设是不正确的,有时您可能需要它们。