用Java做一些代码难题,我想出了以下代码:
public class Foo {
public static void main(String[] args) throws Exception {
int result = bar();
System.out.println(result);
}
public static int bar() {
for (int i = 0; i < 100; i++) {
try {
return i;
} finally {
continue;
}
}
return -1;
}
}
它汇编了一个警告:
finally块无法正常完成
在运行时,我收到以下错误:
错误:发生了JNI错误,请检查您的安装和 再次尝试线程“main”中的异常java.lang.VerifyError:期待 分支目标的堆栈图帧11异常详细信息:位置: Foo.bar()I @ 11:if_icmplt原因: 此位置的预期堆栈图帧。字节码: 0x0000000:033b a700 0684 0001 1a10 64a1 0000 02ac 0x0000010:Stackmap表: append_frame(@ 5,整数) same_frame(@ 8)
at java.lang.Class.getDeclaredMethods0(Native Method)at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)at at java.lang.Class.privateGetMethodRecursive(Class.java:3048)at java.lang.Class.getMethod0(Class.java:3018)at java.lang.Class.getMethod(Class.java:1784)at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544) 在 sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
我会说这不应该发生,对吧? 基于Java规范的“正确”行为是什么?