Java try-throw-catch麻烦

时间:2011-12-13 23:10:20

标签: java

我想执行一堆抛出异常的命令但是我遇到了正确执行程序的问题。

这是我的代码的基本概要:

try
{
   command1 //all three throw exceptions
   command2
   command3
}
catch (Exception e)
{
   //log the exception in a txt file and continue onto the next command
}

如果command1抛出异常,如何让我的程序移动到command2?换句话说,如何返回try-block并从中断处继续执行?感谢。

5 个答案:

答案 0 :(得分:8)

一旦你进入catch区块,你永远不会回到try块。您必须制作三个块才能继续执行。

try { command1(); }
catch (Exception e) { log(e);  }
try { command2(); }
catch (Exception e) { log(e);  }
try { command3(); }
catch (Exception e) { log(e);  }

答案 1 :(得分:3)

鉴于这是家庭作业,你可能也应该知道finally块。

连续的try / catch都没关系,除非你真的需要command2发生,不管是什么 - 即使command1的异常处理失败。

try {
    command1();
} catch (Exception e) {
    command1Failed(e);
} finally {
    try {
        command2();
    } catch (Exception e) {
        command2failed(e);
    }
}

这对你来说是否重要,我不知道,但我认为重要的是你知道仅仅因为command2在一个单独的try / catch块中,它仍然不能保证它会运行,具体取决于您的错误处理方式(例如,无法写入文件权限?)

答案 2 :(得分:2)

你需要让每个命令在它自己的try / catch中执行。 抛出异常后,您将转到catch,并在第一个命令后无法恢复正常执行。

try{
    command1
}catch(Exception e){}

try{
    command2
}catch(Exception e){}

try{
    command3
}catch(Exception e){}

答案 3 :(得分:2)

您只能通过将单个命令包装在try-catch块本身中来实现。

try {
   command1;
}
catch(Exception e) {
 // log this
}
try {
  command2;
}catch(Exception e){
 // log that
}
但是,这很丑陋,所以你可能想考虑重新设计一些类似try,并将各个命令封装在捕获和记录异常的方法中。

答案 4 :(得分:0)

如果每个命令都是一个自己的方法,你可以只是抛出expceptions并用不同的错误信息捕获它们。

public class MyException extends Exception {
    //overide constructor to set your error message
}

......实施命令时

public void command() throws MyException {
    try { //do some stuff
    } catch(Exception e) {
      throw new MyException("my message");
    }
}

...处理命令的所有异常

try {
   command1();
   command2();
} catch (MyException e) {
   // e.getMessage() will return your error message you used in the throws declaration...
}

您还可以使用Command界面,以便在需要时轻松添加更多命令。