finally关键字与return关键字的关系
1. finally的内容,会在真正的return之前,进行调用,如果finally里面改变了函数执行的流程,那么之前那个return就不再执行了。
2. finally是开启一个微型子例程,里面所引用的局部变量,从java栈copy过来(传值,传引用), 不会对java栈值进行修改。
1. finally的内容,会在真正的return之前,进行调用,如果finally里面改变了函数执行的流程,那么之前那个return就不再执行了。
public static int testFinally(){
int i=0;
try{
i=1;
return i;
}finally{
i=2;
return i;
}
}
结果: 2
public static int testFinally2(){
int i=0;
while(true){
Thread.yield();
try{
i=1;
return i;
}finally{
i=2;
continue;
}
}
}
结果: 永远不return
2. finally是开启一个微型子例程,里面所引用的局部变量,从java栈copy过来(传值,传引用), 不会对java栈值进行修改。
public static int testFinally1(){
int i=0;
try{
i=1;
return i;
}finally{
i=2;
}
}
结果: 1