public class Test { public static void main(String a[]){ System.out.println(test()); } public static int test() { int i = 10; try { System.out.println("Start..."); return i+=10; } catch (Exception e) { System.out.println("error..."); }finally { if(i>10) { System.out.println(i); } System.out.println("finally..."); } return i; } }
cmd打开命令行
javac Test,java
javap -c Test
结论:
1.对于上面代码输出结果我心中的答案是 //start... //finally... //20,程序运行后,发现是错的。
原因:虚拟机并不是以代码行为运行单位,而是编译后的指令。从反编译截图来看,代码实际被编译成这样。
try{} 3-16
finally{}
return;
catch{}
finally{}
return;
finally{}
return;