【问题标题】:Android/Java: Inexplicably enters catch block but skips lineAndroid / Java:莫名其妙地进入catch块但跳过行
【发布时间】:2012-06-19 17:45:36
【问题描述】:

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

如果我使用以下代码(在返回 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。

为了我的利益,我不知道为什么会发生这种情况。你有什么想法吗?

【问题讨论】:

  • 您确定要使用最新版本进行调试吗?尝试清理并重新构建。
  • 您查看过返回的实际值吗?有时调试器(由于应用了优化)会跳转到返回位置,该位置似乎设置了不合适的值,但实际上返回值已经正确建立。
  • 请向我们展示整个方法。
  • mah 是对的;该函数确实返回 3,而我遇到的问题是由其他原因引起的,调试器只是让我失望。感谢您的帮助,很抱歉浪费您的时间!
  • 如果您找到了答案,我建议发布该答案并接受它,以便遇到类似问题的人会看到您找到了解决方案(或多或少)。可以回答您自己的问题(SO 甚至鼓励您这样做)。

标签: java android return try-catch parseint


【解决方案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;

【讨论】:

    【解决方案2】:

    mah 说:

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

    mah 是对的。我在这里发布这个是为了明确这是答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-12
      • 1970-01-01
      • 2012-05-19
      • 1970-01-01
      • 2014-01-23
      • 2012-07-01
      • 1970-01-01
      • 2012-11-14
      相关资源
      最近更新 更多