0

我有这样的条件

String str = null;

try{
  ...
  str = "condition2";
}catch (ApplicationException ae) {
  str = "condition3";
}catch (IllegalStateException ise) {
  str = "condition3";
}catch (Exception e) {
  str = "condition3";
}

if(str == null){
  str = "none";
}

现在我想总结一下str = "condition3";。由于 finally 块总是运行,因此无法满足我的需求。还有什么可以做的。

4

6 回答 6

6

从 Java 7 开始,您可以在单个块中捕获多种异常类型。catch代码看起来像这样:

String str = null;

try {
    ...
    str = "condition2";
} catch (ApplicationException|IllegalStateException|Exception ex) {
    str = "condition3";
}

顺便说一句:您发布的代码以及我的 Java 7 代码都可以简单地折叠成catch (Exception e),因为它是和Exception的超类。ApplicationExceptionIllegalStateException

于 2012-05-29T05:22:38.230 回答
2

您可以使用 Java 7 异常处理语法。Java 7 支持在一个 catch 块中处理多个异常。经验 -

String str = null;

try{
  ...
  str = "condition2";
}catch (ApplicationException | IllegalStateException | Exception  ae) {
  str = "condition3";
}
于 2012-05-29T05:26:04.037 回答
1
try{
  ...
  str = "condition2";
}catch (Exception ae) {
 str = "condition3";
}

因为所有其他都是Exception的子类。如果你想显示不同的消息,那么可以尝试如下

try{
   ...
   str = "condition2";
}catch(ApplicationException | IllegalStateException e){
if(e instanceof ApplicationException)
    //your specfic message
    else if(e instanceof IllegalStateException)
    //your specific message
    else
        //your specific message
    str = "condition3";
}
于 2012-05-29T05:26:41.987 回答
1

如果您使用 Java 7 在单个 catch 块中捕获多个异常的特性,则必须添加“final”关键字

catch (final ApplicationException|IllegalStateException|Exception ex) {
于 2012-05-29T05:34:33.180 回答
0

当您在ApplicationExceptionIllegalStateException捕获块和一般异常Exception捕获块中做同样的事情时,您可以删除ApplicationExceptionIllegalStateException阻止。

于 2012-05-29T05:29:41.933 回答
0

我将在这里冒险并提供以下内容:

String str = null;

 try{
     ...
     str = "condition2";
 }catch (Throwable e) {
    str = "condition3";
 }
 finally {
     if(str == null){
         str = "none";
     }
 }

如果这不是您所说的“总结”,请澄清。

请阅读

http://www.tutorialspoint.com/java/java_exceptions.htm http://docs.oracle.com/javase/tutorial/essential/exceptions/

于 2012-05-29T05:31:32.723 回答