我是一名Java初学者,遇到了一些麻烦。我有一个try-catch
块,其中try
部分尝试运行一段代码,如果catch
代码抛出任何类型的错误,try
部分会运行不同的代码。它看起来像:
try {
<code to try>
} catch(Exception e) {
<various variable reassignments>
<run "try" code again> (what I don't know how to do)
}
我认为这涉及某种循环,我对其使用相当熟悉,但我不知道如何将其格式化以适应这种情况。
答案 0 :(得分:4)
如果成功,您可以打破循环,并在出现异常时保持循环:
while (true) {
try {
<code to try>
break; // operations were successful, so leave the loop!
} catch(Exception e) {
<various variable reassignments>
// do not break, i.e. run "try" code again
}
}
答案 1 :(得分:2)
您可以将整个try/catch
块放入循环中,也可以通过try
和catch
进行方法调用。请注意,如果使用循环,则需要一些逻辑来防止无限循环,如果每次抛出Exception
,即使在更新变量值之后也是如此。
进行方法调用
String arg = "foo";
try {
Object.method(arg); // your code, taking your variable as an argument
} catch (Exception e){
arg = "bar"; // update variable value
Object.method(arg); // call your code again
}
使用循环
while (true){
try {
// ... your code, which might throw an Exception
break; // break if there are no exceptions
} catch (Exception e){
// assign vars
}
}
答案 2 :(得分:1)
这突出了一个小的架构问题。
try
/ catch
块中没有隐式循环:如果抛出Exception
,您会尝试恢复。
你可以做的是,从最好到最差:
将try
代码放在方法中,根据需要进行参数化,以便在再次调用时其行为可以更改。然后在try
和catch
块中使用不同的参数调用该方法。
请注意,在这种情况下,catch
块中的调用可能会再次抛出相同的Exception
,您可能认为此时无法恢复。
使用嵌套的try
/ catch
块,您可以在嵌套在try
的{{1}}块中的try
块中改变程序块。
这没关系,但不太可读。
多个嵌套catch
/ try
块会严重降低您的可读性。
将整个catch
/ try
置于一个循环中,其中断条件在所有终止中定义(否则您可能会永远循环并记录大量堆栈迹线)
这在理论上是可以接受的,但通常会随着时间的推移而受到灾难的影响。
答案 3 :(得分:1)
将<code to try>
重构为一个单独的方法。在try
和catch
内调用它。通过这种方式,您将实现类似单次重试的功能。另一个选择是将整个try catch
置于while
循环中,并使用变量控制所需的重试次数,并根据结果初始化不同的变量。
答案 4 :(得分:0)
我想你想要这样的东西:
boolean run = true;
while(run)
{
try
{
// do action
run = false;
}
catch(Exception e)
{
// do whatever actions
// when you want to break, set run = false
}
}
答案 5 :(得分:0)
您可以将整个try / catch包含到for / while循环中,该循环将在try成功运行时退出。
while (true) {
try {
<code to try>
//exit on success
} catch(Exception e) {
<various variable reassignments>
}
}
答案 6 :(得分:0)
您可以使用InboxArray
循环进行换行,然后如果您没有进入z,x,y,a,b,c
作业并进入while
部分,请执行编码和{ {1}}循环将再次运行try-catch部分。
例如:
success = true
答案 7 :(得分:0)