Java vs Objective-C:异常,达到finally块

时间:2011-08-08 10:12:45

标签: java objective-c exception finally

我在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测试中

2 个答案:

答案 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块,现在在我的函数中,最后到达块了!

所以,我确认无论是否发生重复(并且重新抛出),仍然可以达到最终阻止。