Java 由其他异常引起的异常

Java 由其他异常引起的异常,java,exception,Java,Exception,在我的应用程序中,我看到的日志显示 Exception1 caused by: Exception2 caused by: Exception3 所以,如果我想使用try-catch处理这个场景,我应该在catch块中给出哪个异常?我使用的是JDK1.6,针对多个异常的单捕获不是我的解决方案。使用多捕获块是我最后的选择。您应该捕获异常1,因为这是最后一个抛出的异常 第一个异常3被抛出并被捕获。捕获它的catch块抛出了异常2 然后捕获到异常2。catch块捕获它抛出的异常Exception1您

在我的应用程序中,我看到的日志显示

Exception1
caused by: Exception2
caused by: Exception3

所以,如果我想使用try-catch处理这个场景,我应该在catch块中给出哪个异常?我使用的是JDK1.6,针对多个异常的单捕获不是我的解决方案。使用多捕获块是我最后的选择。

您应该捕获异常1,因为这是最后一个抛出的异常

第一个
异常3
被抛出并被捕获。捕获它的catch块抛出了
异常2


然后捕获到异常2。catch块捕获它抛出的异常
Exception1

您应该捕获
Exception1
,因为这是最后一个抛出的异常

第一个
异常3
被抛出并被捕获。捕获它的catch块抛出了
异常2


然后捕获到异常2。catch块捕获它抛出的异常
Exception1

您应该捕获
Exception1
,因为这是最后一个抛出的异常

第一个
异常3
被抛出并被捕获。捕获它的catch块抛出了
异常2


然后捕获到异常2。catch块捕获它抛出的异常
Exception1

您应该捕获
Exception1
,因为这是最后一个抛出的异常

第一个
异常3
被抛出并被捕获。捕获它的catch块抛出了
异常2


然后捕获到异常2。catch块捕获它抛出的异常
Exception1

如果要在每个异常的情况下执行一般处理,则需要捕获顶级异常,即在您的情况下的
Exception1


如果要为每个异常执行特定的操作,则应单独处理每个异常

如果要对每个异常执行一般处理,则需要捕获顶级异常,即案例中的
Exception1


如果要为每个异常执行特定的操作,则应单独处理每个异常

如果要对每个异常执行一般处理,则需要捕获顶级异常,即案例中的
Exception1


如果要为每个异常执行特定的操作,则应单独处理每个异常

如果要对每个异常执行一般处理,则需要捕获顶级异常,即案例中的
Exception1


如果要为每个异常执行特定的操作,则应单独处理每个异常。解决此问题的标准方法是捕获代码导致的每个异常最糟糕的方法是捕获常规类
异常
。像这样:

try {
     MyObject.doAThingThatCausesAnException();
} catch (Exception ex) {
     //handle your exception here
}
这不是你想用你的代码做的,因为它是通用的捕获每个异常,这些异常将与这样一个自己的捕获块一起抛出。

try {
       MyObject.doAThingThatCausesAnException();
    } catch (NullPointerException ex1)  {
       //handle that exception
    } catch (SQLException ex2) {
       //handle that exception
    } 
    //and so on...

我建议使用编程风格(第二种),因为您不会忘记要处理的任何异常,并且可以在异常之间进行特定划分。

解决此问题的标准方法是捕获代码导致的每个异常最糟糕的方法是捕获常规类
异常
。像这样:

try {
     MyObject.doAThingThatCausesAnException();
} catch (Exception ex) {
     //handle your exception here
}
这不是你想用你的代码做的,因为它是通用的捕获每个异常,这些异常将与这样一个自己的捕获块一起抛出。

try {
       MyObject.doAThingThatCausesAnException();
    } catch (NullPointerException ex1)  {
       //handle that exception
    } catch (SQLException ex2) {
       //handle that exception
    } 
    //and so on...

我建议使用编程风格(第二种),因为您不会忘记要处理的任何异常,并且可以在异常之间进行特定划分。

解决此问题的标准方法是捕获代码导致的每个异常最糟糕的方法是捕获常规类
异常
。像这样:

try {
     MyObject.doAThingThatCausesAnException();
} catch (Exception ex) {
     //handle your exception here
}
这不是你想用你的代码做的,因为它是通用的捕获每个异常,这些异常将与这样一个自己的捕获块一起抛出。

try {
       MyObject.doAThingThatCausesAnException();
    } catch (NullPointerException ex1)  {
       //handle that exception
    } catch (SQLException ex2) {
       //handle that exception
    } 
    //and so on...

我建议使用编程风格(第二种),因为您不会忘记要处理的任何异常,并且可以在异常之间进行特定划分。

解决此问题的标准方法是捕获代码导致的每个异常最糟糕的方法是捕获常规类
异常
。像这样:

try {
     MyObject.doAThingThatCausesAnException();
} catch (Exception ex) {
     //handle your exception here
}
这不是你想用你的代码做的,因为它是通用的捕获每个异常,这些异常将与这样一个自己的捕获块一起抛出。

try {
       MyObject.doAThingThatCausesAnException();
    } catch (NullPointerException ex1)  {
       //handle that exception
    } catch (SQLException ex2) {
       //handle that exception
    } 
    //and so on...

我推荐编程风格(第二种),因为您不会忘记要处理的任何异常,并且您可以在异常之间进行特定的划分。

您看到的是一种很好的做法,可以捕获特定级别的异常,并抛出一个新异常,以便捕获异常的人更好地理解异常的上下文。但是,包含来自较低级别异常的信息通常很有用。这被称为

例如,您可以在侦听套接字时捕获一个
IOException
,然后抛出一个(自定义)
NetworkException
,以便在将其传递到捕获点并可能再次重试时进一步区分它


在您的情况下,您只需捕获
例外1
。但是,您可以使用其原因作为如何处理异常的提示。

您看到的是一种很好的做法,即在某个级别捕获异常并抛出一个新异常,以便捕获异常的人更好地了解异常的上下文。但是,包含来自较低级别异常的信息通常很有用。这被称为

例如,您可以在侦听套接字时捕获一个
IOException
,然后抛出一个(cust