finally解析:
public static int inc() {
int i;
try{
i = 2;
return i;
}catch(Exception e) {
i = 3;
return i;
}finally {
i = 4;
}
}
该方法返回值:
[u][color=red]正常情况返回2,异常情况下返回3,未知异常不返回任何值[/color][/u]
注意:
1、方法本身的执行顺序是try{} - finally{} - return
2、由于虚拟机栈的执行机制,具体执行是:
执行 i = 2
把i值保存到栈(方法调用链)对应栈帧(一般对应一个方法)的本地变量表最后一个Slot([u][color=red]总是把return前面的,需要返回的值,保存到最后一个Slot[/color][/u],这里值是2)
执行 i = 4
[u][color=red]取回本地变量表最后一个Slot值[/color][/u],放置到操作栈顶(这里值是2),准备返回
返回该值(栈顶值)
public static int inc() {
int i;
try{
i = 2;
return i;
}catch(Exception e) {
i = 3;
return i;
}finally {
i = 4;
}
}
该方法返回值:
[u][color=red]正常情况返回2,异常情况下返回3,未知异常不返回任何值[/color][/u]
注意:
1、方法本身的执行顺序是try{} - finally{} - return
2、由于虚拟机栈的执行机制,具体执行是:
执行 i = 2
把i值保存到栈(方法调用链)对应栈帧(一般对应一个方法)的本地变量表最后一个Slot([u][color=red]总是把return前面的,需要返回的值,保存到最后一个Slot[/color][/u],这里值是2)
执行 i = 4
[u][color=red]取回本地变量表最后一个Slot值[/color][/u],放置到操作栈顶(这里值是2),准备返回
返回该值(栈顶值)