关于finally中的语句和try中的return之间的执行顺序
首先是第一种情况:
我们这里由于程序只是单一的,所以后面的代码只有主题部分:
Public class test{
Public static void main(String[] args){
System.out.println(new test().Test());
}
Static int Test(){
Int x=1;
Try{
Return x;
}finally{
++x;
System.out.println(“x=”+x);
}
}
}
这里的打印结果是:
X=2;
1
分析:有程序可知,return在try中,那么finally中的code会在return返回之前执行。
说明:其实具体的执行顺序是这样的,就是执行到了try中的return语句,但是,还没有返回,这时就执行finally中的code,也就是结果已经在返回的结果容器中了,也就是说后面的finally中的x的值对结果没有影响。
接下来是第二种情况:
代码如下:
Static int Test(){
Int x=1;
Try{
Return x;
}finally{
Return ++x;
}
}
这时打印的结果就是:
2
说明:从结果上可以看出,finally中的return的值覆盖掉了try中的值。
第三种情况:返回类对象了
class People
{
String name;
String age;
public String getAge(){
return age;
}
public void setAge(String age){
this.age = age;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public People(){
super();
}
public People instanceName(String name,People p){
p.setName(name);
return p;
}
public People instanceAge(String age,People p){
p.setAge(age);
return p;
}
}
这里是一个测试类:
class test1
{
public static void main(String[] args)
{
People p = new People();
test1(p);
System.out.println(p.getName());
System.out.println(p.getAge());
}
public static People test1(People p){
try{
System.out.println("try....");
return p.instanceName("name",p);
}finally{
System.out.println("finally.....");
//return p.instanceAge("age",p);
}
}
}
}
结果是:
Try….
Finally…..
Name
另外,如果不将finally中的return注释的话,那结果就是:
Try…
Finally….
Name
Age
说明:有结果可知,执行顺序应该是这样的
结论:
Try中的语句到àreturn 但是还没有返回,然后在执行finally中的语句,
(1) 如果finally中有return时,那么执行到return语句,同样没有返回。
接下来就返回try中返回值,最后返回finally中的返回值。
(2)另一种情况就是,没有return时,同上面,就是不再执行finally中的返回值。