想象一下,我有一个像这样的方法
void myMethod(MyThing t) throws MyException {
t.foo = "bar";
if (t.condition()) {
throw new MyException();
}
}
如果触发异常,t.foo的值是否会恢复为之前的值?还是保持“条形”值?
答案 0 :(得分:9)
MyThing对象上foo属性的值不会还原任何异常。
在您的示例中,没有try
块,但如果有,则可以在相应的catch
块中执行您自己的值回滚类型。
try {
t.foo = "bar";
doSomethingRiskyWhichMightThrowMyException();
} catch(MyException e) {
t.foo = "rolledbackvalue";
}
答案 1 :(得分:3)
Throwing / catching
例外不会自动暗示任何回滚操作。
如果在抛出异常之前更改了变量foo
,则该值之后也将保持更改状态。
答案 2 :(得分:3)
该值不会更改为其先前的值。事实上,这就是你在catch块中要做的事情。如果发生该类型的异常,您可以重新初始化catch块中的值。尝试使用catch块可以让您执行操作,这样您就不会永远陷入陷阱。应该做什么,是否在发生此类异常时回滚,完全是程序员的决定。
答案 3 :(得分:2)
任何代码都遵循顺序模式。即First语句First等等(除非你有一些循环来重复语句或goto语句跳过或重复块)。 在您的示例中,在抛出异常之后,执行控制将转到Java的异常处理程序(因为您没有通过try-catch块编写任何异常处理代码)并最终突然结束。所以它不会在任何情况下“回溯”它的路径并返回到恢复t.foo值。它只是“条形”字符串。希望它有所帮助。