Android / Java:莫名其妙地进入catch块但跳过了一行

时间:2012-06-17 12:26:15

标签: java android return try-catch parseint

我发现这种奇怪的行为不仅在调试时,而且在正常执行期间(至少我是这么想的,基于应用程序的行为)。

如果我使用以下代码(在返回int的函数中):

try {
    return Integer.parseInt("3");
} catch (NumberFormatException ex) {
    System.out.println(ex.getMessage());
    return 0;
}

在调试期间,'return Integer.parseInt(“3”);'调试器跳转到'return 0;'。它似乎进入了catch块,但跳过了System.out行,甚至没有将“ex”显示为现有变量。然后该函数返回0。

但如果我用以下内容替换上述内容:

int x;
try {
    x = Integer.parseInt("3");
} catch (NumberFormatException ex) {
    System.out.println(ex.getMessage());
    x = 0;
}
return x;

然后一切都像我期望的那样:x得到值3,函数返回3。

为了我的利益,我无法弄清楚为什么会这样。你有什么想法吗?

2 个答案:

答案 0 :(得分:1)

不确定为什么要这样做,但作为另一种建议:

int returnValue = 0; // set returnValue to error as default
try {
    returnValue = Integer.parseInt("3");
} catch (NumberFormatException ex) {
        System.out.println(ex.getMessage());
}
return returnValue;

答案 1 :(得分:0)

mah说:

您是否查看了返回的实际值?有时调试器(由于应用了优化)将跳转到返回位置,该位置似乎设置了不适当的值,但实际上返回值已经正确建立。

嗯,是的。我在这里张贴这个是为了清楚它是答案。