如果我运行代码尝试捕捉恢复
try
{
line one
line 2
line 3
.
.
.
.
}
catch(Exception x)
{
}
现在如果出现异常,在任何一行我不知道,我们在该行做抓一些东西,所以剂量不发生异常再现在我们需要的GoBack从发生异常的地方排队并执行同一行,我们如何做到这一点?
如果我运行代码尝试捕捉恢复
try
{
line one
line 2
line 3
.
.
.
.
}
catch(Exception x)
{
}
现在如果出现异常,在任何一行我不知道,我们在该行做抓一些东西,所以剂量不发生异常再现在我们需要的GoBack从发生异常的地方排队并执行同一行,我们如何做到这一点?
假设这是Java中,你不能做到这一点 - 一旦抛出异常,没有在try
块的其余部分将被执行。你将不得不使用多个try/catch块来明确你想要做什么:
try {
line one
} catch (Exception x) {
fixup line one
}
try {
line 2
} catch (Exception x) {
fixup line 2
}
...等。
但有多少尝试catchrerements?有没有其他方式 – 2011-01-05 18:37:19
@Afnan是的。将try catch语句放在'do {} while();'循环中。将条件设置为false,则会在循环的开始,并且真正在任何catch块。 – 2011-01-06 01:51:38
这种失败的尝试捕捉的目的。如果你发现异常,你应该处理这个错误。如果你想继续你离开的地方,最好的方法可能是把代码放在finally块中。如果发生异常或者没有发生异常,此代码将始终运行。
try {
//some exception prone code
}
catch(Exception e) {
//handle exception
}
finally {
//Always runs after exception caught or if no exception thrown
}
,如果你想继续你离开的地方通常是把可能它自己的try/catch块中失败的每个操作正确的成语;如果这会导致代码膨胀,人们可能会写它包装匿名方法在一个try/catch适合于手头的任务时尚“tryExec”的方法。 – supercat 2011-06-27 22:58:15
你不知道。如果你解决了这个问题,你应该再次运行整个模块。 try块的要点是它具有执行特定任务所需的所有内容。在这之后的任何事情都是不可能的。如果您需要清理打开文件描述符,则可以使用finally块;但你确实需要解决这个问题,然后再试一次,或者用一个好的错误信息去死。
你能坚持在try/catch块一个循环内,像这样:
bool done = NO;
while (! done) {
try {
done = YES;
} catch {
}
}
这将导致整个块被重新执行。如果你想继续你离开的地方,那么你需要沿途跟踪你的状态:
bool done = NO;
int state = 0; // setup some constants, kStateA = 0, kStateB = 1, etc:
while (! done) {
try {
switch (state) {
case kStateA: line 1; ++state; // fall through
case kStateB: line 2; ++state;
// etc.
}
done = YES;
} catch {
}
}
上面的代码,简化为更符合你的问题行看起来是这样的(虽然状态机的概念仍然是基本原理):
bool done = NO;
int lineNumber = 1;
while (! done) {
try {
switch (lineNumber) {
case 1: line 1; ++lineNumber; // fall through
case 2: line 2; ++lineNumber; // fall through
// etc.
}
done = YES;
} catch {
}
}
我不明白这个问题。你能尝试以不同的方式解释吗? – 2011-01-05 18:30:20
一个普通的老GOTO会做......开玩笑。你在代码中显示的方式很难。如果拆分了调用单个故障报表的方式@大卫Gelhar表演及将它们放在不同的功能,你可以重新运行在catch一个“失败”的功能,但如果在“我们做一些东西在追赶,这样的例外剂量不会发生“不起作用? – user44298 2011-01-05 19:04:38