考虑到这一点的代码,我可以绝对肯定的是,finally块总是执行,不管something()是什么?
try {
something();
return success;
}
catch (Exception e) {
return failure;
}
finally {
System.out.println("I don't know if this will get printed out");
}
Run Code Online (Sandbox Code Playgroud) 如果finally块抛出异常,究竟会发生什么?
具体来说,如果在finally块的中途抛出异常会发生什么.是否调用了此块中的其余语句(之后)?
我知道异常会向上传播.
我见过有人说使用不带参数的catch是不好的形式,特别是如果catch没有做任何事情:
StreamReader reader=new StreamReader("myfile.txt");
try
{
int i = 5 / 0;
}
catch // No args, so it will catch any exception
{}
reader.Close();
Run Code Online (Sandbox Code Playgroud)
但是,这被认为是好的形式:
StreamReader reader=new StreamReader("myfile.txt");
try
{
int i = 5 / 0;
}
finally // Will execute despite any exception
{
reader.Close();
}
Run Code Online (Sandbox Code Playgroud)
据我所知,将清理代码放在finally块中并在try..catch块之后放置清理代码之间的唯一区别是,如果你的try块中有return语句(在这种情况下,最后清理代码将是运行,但try..catch之后的代码不会).
否则,最后有什么特别之处?
为什么@try阻止工作?它崩溃了应用程序,但它应该被@try块捕获.
NSString* test = [NSString stringWithString:@"ss"];
@try {
[test characterAtIndex:6];
}
@catch (NSException * e) {
NSLog(@"Exception: %@", e);
}
@finally {
NSLog(@"finally");
}
Run Code Online (Sandbox Code Playgroud) 最近我惊讶地发现在Java中的finally块中可以有一个return语句.
似乎很多人认为这样做是不好的,如' 不要在最终条款中返回 '中所描述的那样.更深入地抓了一下,我还发现' Java的回归并不总是 ',这显示了最终块中其他类型的流控制的一些非常可怕的例子.
所以,我的问题是,有人能给我一个例子,其中finally块中的return语句(或其他流控制)产生更好/更可读的代码吗?
所以今天早上我遇到了一些看起来像这样的代码:
try
{
x = SomeThingDangerous();
return x;
}
catch (Exception ex)
{
throw new DangerousException(ex);
}
finally
{
CleanUpDangerousStuff();
}
Run Code Online (Sandbox Code Playgroud)
现在这段代码编译得很好并且可以正常工作,但是从try块中返回它感觉不对,特别是如果最终有关联的话.
我的主要问题是如果最终抛出它自己的例外会发生什么?你有一个返回的变量,但也有一个例外来处理...所以我有兴趣知道其他人在try块中返回的想法?
我正在审查一些新代码.该程序只有一个try和一个finally块.由于catch块被排除在外,如果遇到异常或任何可抛出的东西,try块如何工作?它只是直接进入finally块吗?
对于Python中任何可能的try-finally块,是否可以保证finally块总是被执行?
例如,假设我在一个except块中返回:
try:
1/0
except ZeroDivisionError:
return
finally:
print("Does this code run?")
Run Code Online (Sandbox Code Playgroud)
或许我重新提出一个Exception:
try:
1/0
except ZeroDivisionError:
raise
finally:
print("What about this code?")
Run Code Online (Sandbox Code Playgroud)
测试显示finally上面的例子确实执行了,但我想还有其他我没有想过的场景.
是否有任何情况下finally块无法在Python中执行?
try/catch块中的return语句如何工作?
function example() {
try {
return true;
}
finally {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
我期待这个功能的输出true,但它是false!
为什么这样呢
} catch (SQLException sqle) {
sqle.printStackTrace();
} finally {
cs.close();
rs.close();
}
Run Code Online (Sandbox Code Playgroud)
而不是这个
} catch (SQLException sqle) {
sqle.printStackTrace();
}
rs.close();
cs.close();
Run Code Online (Sandbox Code Playgroud) java ×4
try-catch ×4
c# ×3
return ×3
exception ×2
finally ×2
try-finally ×2
.net ×1
iphone ×1
javascript ×1
nsexception ×1
objective-c ×1
python ×1