我在java中使用dobjective-C程序测试异常。
在这些测试中,我发现当捕获并重新抛出异常时,达到finally块的方式有所不同。
这是我的java测试:
try {
Boolean bThrow = true;
System.out.println("try : before exception sent");
if (bThrow) {
throw new Exception();
}
System.out.println("try : after sent");
}
catch (Exception e) {
System.out.println("catch, rethrow");
throw e;
}
finally {
System.out.println("finally");
}
显示:
try: before exception sent
catch, rethrow
finally
这是我的目标-c测试:
@try {
NSException *myexc = [NSException exceptionWithName:@"exceptionTest" reason:@"exceptionTest" userInfo:nil];
BOOL bThrow = YES;
NSLog(@"try : before exception sent");
if (bThrow) {
@throw myexc;
}
NSLog(@"try : after sent");
}
@catch (Exception *exception) {
NSLog(@"catch, rethrow");
@throw exception;
}
@finally {
NSLog(@"finally");
}
显示:
try: before exception sent
catch, rethrown
*** Terminating app
未达到finally块中的代码!
为什么会出现这种差异?
[编辑]对不起,@ try ... @try ... @try ...是个错误。 我改变了它,但问题是一样的,我无法达到最终阻止在objective-c测试中
答案 0 :(得分:4)
你的Objective-C代码没有finally块,只有三个try块。它应该是这样的:
@try {
NSException *myexc = [NSException exceptionWithName:@"exceptionTest" reason:@"exceptionTest" userInfo:nil];
BOOL bThrow = YES; // Use BOOL or bool
NSLog(@"try : before exception sent");
if (bThrow) {
@throw myexc;
}
NSLog(@"try : after sent");
}
@catch (NSException *e) { // use catch not another try
NSLog(@"catch, rethrow");
@throw e;
}
@finally { // use finally not another try
NSLog(@"finally");
}
答案 1 :(得分:-1)
好的,我解决了我的问题。
在我的objective-c测试中,应用程序崩溃,这就是为什么没有达到最终阻止的原因。
如果我在main中添加一个try catch块,现在在我的函数中,最后到达块了!
所以,我确认无论是否发生重复(并且重新抛出),仍然可以达到最终阻止。