最后阻止表现不同

时间:2012-05-29 05:20:44

标签: java try-catch try-catch-finally finally

我有这样的条件

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";。最后,块总是运行,以至于无法满足我的需求。还有什么可以做的。

6 个答案:

答案 0 :(得分:6)

从Java 7开始,您可以在一个catch块中catch multiple exception types。代码看起来像这样:

String str = null;

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

BTW:您发布的代码以及我的Java 7代码都可以简化为catch (Exception e),因为ExceptionApplicationException和{{}的超类3}}

答案 1 :(得分:2)

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

String str = null;

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

答案 2 :(得分:1)

try{
  ...
  str = "condition2";
}catch (Exception ae) {
 str = "condition3";
}

因为所有其他人都是例外的子类。如果您想显示不同的消息,可以尝试按照

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

答案 3 :(得分:1)

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

catch (final ApplicationException|IllegalStateException|Exception ex) {

答案 4 :(得分:0)

正如您在ApplicationExceptionIllegalStateException捕获块以及一般异常Exception捕获阻止中执行相同操作一样,您可以删除ApplicationExceptionIllegalStateException块。

答案 5 :(得分: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/