我想执行一堆抛出异常的命令但是我遇到了正确执行程序的问题。
这是我的代码的基本概要:
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并从中断处继续执行?感谢。
答案 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界面,以便在需要时轻松添加更多命令。