public class FinallyTest {
static int x;
public static void main(String[] args) {
int y=test();
System.out.println(x);
System.out.println(y);
}
public static int test(){
try{
x=10;
return x;//此时x=100;,但返回的值是10。
}catch(Exception e){
}finally {
x=100;
}
return x;
}
}
//最后的结果是y=10;x=100
//------------------------------------------------------------------------
class FinallyTest {
static int x;
public static void main(String[] args) {
int y=test();
System.out.println(x);
System.out.println(y);
}
public static int test(){
try{
x=10;
return x;
}catch(Exception e){
}finally {
x=100;
return x;//在这里返回x
}
}
}
//最后结果是y=100,x=100
/*
百度大神给的解释:
1.如果finally代码块中没有return
在返回结果之前,先把结果(基本数据类型的值或引用数据类型的地址值)压到栈顶,等finally代码看执行完后,把栈顶的结果返回。
2.如果finally代码块中有return
finally的return把自己要返回的结果压到栈顶,最后把栈顶结果返回。
注意: 如果返回值是基本数据类型,那么finally中对变量的修改与try中返回的值没有影响,如果是引用数据类型会有影响
*/
|
|