所以这里是我的应用程序中的一些代码:
public void run() throws myException{
boolean gameOver = false;
while(!gameOver){
//do stuff, and eventually make gameOver true to end execution
...
现在是交易,我想删除布尔属性以使用用户定义的异常来结束执行。 我正在考虑检查是否在while条件下抛出了这个异常,只要它已经抛出 not 就保持循环。
的内容
while(myException.notThrown){
可以这样做吗?
答案 0 :(得分:3)
您的问题的答案是是,但这种结构的实施取决于您的需求。
直接(和不恰当的)方式是:
public void run() {
MyException ex = null;
while(ex == null) {
try {
// Do stuff
} catch(MyException e) {
// Maybe handle this exception
ex = e;
}
}
}
但这是一种奇怪的逻辑形式,可以简化为:
public void run() {
while(true) {
try {
// Do stuff
} catch(MyException e) {
// Maybe handle this exception
break;
}
}
}
或者这是我对这三者的偏好:
public void run() {
try {
while(true) {
// Do stuff
}
} catch(MyException e) {
// Maybe handle this exception
}
}
尽管存在所有这些可能性,因为您的throws MyException
签名中已经有run
,假设您的来电者正确处理它,您可以这样做:
public void run() throws MyException {
while(true) { // Or maybe some exit condition?
try {
// Do stuff
}
}
}
这使异常传播给调用者。然后,让调用者处理结果异常:
try {
myObject.run();
} catch(MyException e) {
// Handle this exception
}
您想要使用的结构取决于您的逻辑流程。考虑哪个实体应该处理您的自定义异常。抛出此异常是什么意思?谁/什么负责处理这种情况?
答案 1 :(得分:2)
但为什么呢?如果你真的需要它,你可以做一个无限循环来做,你可以做那样的事情
while (true) {
try {
// some code to throw an exception
} catch(Exception e) {
e.printStackTrace();
break;
}
}
UPDATE 您可以将内部循环变为异常
try {
while (true) {
// some code to throw an exception in order to remove the break keyword
}
} catch (Exception e) {
e.printStackTrace();
}
答案 2 :(得分:0)
你可以和休息时间一起玩。如果发生异常,你会打破这段时间。
while (true) {
try {
...
} catch (YourException e) {
break;
}
}
答案 3 :(得分:0)
是的,你可以这样做:
public class Example {
public static void run() throws IOException {
if (Math.random() > 0.75) {
throw new IOException();
}
}
public static void main(final String... args) {
boolean thrown = false;
while (!thrown) {
System.out.println("Roll");
try {
run();
} catch (IOException ex) {
thrown = true;
}
}
System.out.println("Done");
}
}
在示例卷上将输出:
Roll
Roll
Roll
Roll
Roll
Done
这可能是一个糟糕的想法,因为它会使代码更难阅读,更难维护,抛出异常的开销也可能使代码变慢。
答案 4 :(得分:0)
是的,有可能。 但是使用flow control is generally considered an anti-pattern的例外;它使得更难以阅读和调试代码。