Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的多个异常处理_Java_Logging_Exception Handling - Fatal编程技术网

java中的多个异常处理

java中的多个异常处理,java,logging,exception-handling,Java,Logging,Exception Handling,我需要处理一个特定的异常和所有其他异常的其余部分,这些异常应该为我们提供相同的日志信息,但日志级别应该不同(前者应该是log.warn,其余的应该是log.error) 这需要最小化,因为消息是相同的,但需要将代码的其余部分作为公共代码,而不是将其写入几次您可以使用多个catch块来完成此操作,最后是catchException,它是所有已检查异常的基类。例如: try{ //try something } catch (SomeTypeException e){ //things } catc

我需要处理一个特定的异常和所有其他异常的其余部分,这些异常应该为我们提供相同的日志信息,但日志级别应该不同(前者应该是log.warn,其余的应该是log.error)


这需要最小化,因为消息是相同的,但需要将代码的其余部分作为公共代码,而不是将其写入几次

您可以使用多个
catch
块来完成此操作,最后是catch
Exception
,它是所有已检查异常的基类。例如:

try{
//try something
} catch (SomeTypeException e){
//things
} catch (AnotherException e){
//AnotherThings
}
try {
    // Your code here.
} catch (SpecificException e) {
    log.warn("Warning!", e);
} catch (AnotherSpecificException e) {
    log.warn("Another warning!", e);
} catch (Exception e) {
    log.error("Error!", e)
}

您可以使用多个catch块来完成此操作,最后使用catch
Exception
,即所有选中异常的基类。例如:

try {
    // Your code here.
} catch (SpecificException e) {
    log.warn("Warning!", e);
} catch (AnotherSpecificException e) {
    log.warn("Another warning!", e);
} catch (Exception e) {
    log.error("Error!", e)
}

只需添加几个catch部分,并以catch all结束

try {
 // Some code
}
catch (IOException ex) {
     logger.log(ex);
     throw ex;
catch (Exception ex) {
     logger.log(ex);
     throw ex;
}

阅读这里的更多内容:

只需添加几个catch部分,并以catch all结束

try {
 // Some code
}
catch (IOException ex) {
     logger.log(ex);
     throw ex;
catch (Exception ex) {
     logger.log(ex);
     throw ex;
}

请阅读此处的更多信息:

以下示例(在Java SE 7及更高版本中有效)消除了重复的代码:

try{

  }
  catch (IOException|SQLException ex) {
        logger.log(ex);
        throw ex;
    }

以下示例(在Java SE 7及更高版本中有效)消除了重复的代码:

try{

  }
  catch (IOException|SQLException ex) {
        logger.log(ex);
        throw ex;
    }

由于Java7,您可以尝试使用Multicatch

    try {
        new Foo("").doSomething();
    } catch (Exception1 | Exception2  e) {
        e.printStackTrace();
    }

由于Java7,您可以尝试使用Multicatch

    try {
        new Foo("").doSomething();
    } catch (Exception1 | Exception2  e) {
        e.printStackTrace();
    }

你有几种方法可以做到这一点。如前面的答案所示,您可以像下面这样连续进行catch语句:

try {
    // Code that potentially throws multiple exceptions
}
catch (IOException ex) {
    // Manage this particular exception case
}
catch (Exception ex) {
    // Manage remaining exceptions
}
通过这种方式,您将能够管理特定情况,并定义一个点,在该点上,将管理与以下操作相关的所有异常。通过在流程的早期(主循环、重服务调用…)使用此
try
语句,您可以管理许多异常,但无法管理特定情况,因为您不知道哪些特定操作引发了异常。通过包装一些特定的操作(访问文件、请求…),您将能够对这些异常进行非常具体的管理

正如答案中所指出的,当Java>=7时,此语法将起作用:

try {
    // Code that potentially throws multiple exceptions
}
catch (IOException|SQLException ex) {
    // Manage these particular exceptions
}
catch (Exception ex) {
    // Manage remaining exceptions
}

当您需要以完全相同的方式管理不同的异常时,可以使用这种方法。如果一个操作会引发不同的异常(即访问文件),但您只想管理一些特定的错误情况,而不必担心可能引发的所有问题,那么这将非常有用。

您有几种方法可以做到这一点。如前面的答案所示,您可以像下面这样连续进行catch语句:

try {
    // Code that potentially throws multiple exceptions
}
catch (IOException ex) {
    // Manage this particular exception case
}
catch (Exception ex) {
    // Manage remaining exceptions
}
通过这种方式,您将能够管理特定情况,并定义一个点,在该点上,将管理与以下操作相关的所有异常。通过在流程的早期(主循环、重服务调用…)使用此
try
语句,您可以管理许多异常,但无法管理特定情况,因为您不知道哪些特定操作引发了异常。通过包装一些特定的操作(访问文件、请求…),您将能够对这些异常进行非常具体的管理

正如答案中所指出的,当Java>=7时,此语法将起作用:

try {
    // Code that potentially throws multiple exceptions
}
catch (IOException|SQLException ex) {
    // Manage these particular exceptions
}
catch (Exception ex) {
    // Manage remaining exceptions
}

当您需要以完全相同的方式管理不同的异常时,可以使用这种方法。如果单个操作会引发不同的异常(即访问文件),但您只想管理一些特定的错误情况,而不必担心可能引发的所有问题,那么这将非常有用。

请通过示例详细说明。更好的是,向我们展示您迄今为止所做的工作,并解释您希望我们帮助您改进的内容。那么您希望以不同的方式处理单独的异常吗?或者你想一次处理所有的问题@Emojiuse一个
try{…}catch(MyFirstException mfe){}catch(MySecondException mse){}
消息是相同的,但需要发送,以使其余代码成为公共代码,而不是多次编写。请通过示例详细说明。更好的是,向我们展示您迄今为止所做的工作,并解释您希望我们帮助您改进的内容。那么您希望以不同的方式处理单独的异常吗?或者你想一次处理所有的问题@Emojiuse a
try{…}catch(MyFirstException mfe){}catch(MySecondException mse){}
消息是相同的,但需要发送以使其余代码成为通用代码,而不是将其写入两次消息是相同的,但需要发送以使其余代码成为通用代码,而不是将其写入两次不确定我是否完全理解您的意愿,但是也许我把答案放在第二种方法是关键:只要把每一个你认为是警告的异常都抓到,而另一个是错误的,你可以检查帖子中的修改代码。我需要将相同块的代码作为一次给定,而不是多次给定相同的代码。我将检查异常名称,如果它在“警告级别”列表中,则执行此情况下需要执行的操作。因此,只有一个常规捕获,两个异常名称数组(一个用于错误,一个用于警告)和一个简单的查找,以确定您在消息上的级别是相同的,但需要发送,以使其余代码成为一个通用代码,而不是多次编写。我不确定是否完全理解您的意愿,但是也许我把答案放在第二种方法是关键:只要把每一个你认为是警告的异常都抓到,而另一个是错误的,你可以检查帖子中的修改代码。我需要将相同块的代码作为一次给定,而不是多次给定相同的代码。我将检查异常名称,如果它在“警告级别”列表中,则执行此情况下需要执行的操作。因此,只有一个常规捕获、两个异常名称数组(一个用于错误,一个用于警告)和一个简单的查找来确定您所处的级别