我不仅在调试时发现了这种奇怪的行为,而且在正常执行期间也发现了这种奇怪的行为(至少我是这样认为的,基于应用程序的行为方式)。
如果我使用以下代码(在返回 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。
为了我的利益,我无法弄清楚为什么会发生这种情况。你有什么主意吗?