博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于finally中的语句和try中的return之间的执行顺序
阅读量:5331 次
发布时间:2019-06-15

本文共 1657 字,大约阅读时间需要 5 分钟。

 

首先是第一种情况:

我们这里由于程序只是单一的,所以后面的代码只有主题部分:

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中的返回值。

转载于:https://www.cnblogs.com/cloudblogs/p/4354273.html

你可能感兴趣的文章
步步为营-86-WSFUpload组件
查看>>
【转】分布式Tensorflow
查看>>
document.getElementsByClassName返回的是一个数组
查看>>
3st 关于position四定位
查看>>
iOS开发-登录界面开发(3)CocoaPods的安装-Swfit4.1_Xcode9.3.1
查看>>
ubuntu14.04下安装ngnix,mediawiki,nodebb,everything,gitlab
查看>>
javaweb(二十四)——jsp传统标签开发
查看>>
svn插件下载的两种方式
查看>>
[剑指offer] 41. 数据流中的中位数 (大小堆,优先队列)
查看>>
Hero In Maze
查看>>
为button上的Title设置阴影
查看>>
利用 index、explain和profile优化mysql数据库查询小结
查看>>
二维图形的矩阵变换(二)——WPF中的矩阵变换基础
查看>>
Maven - 坐标
查看>>
在SQL SERVER中获取表中的第二条数据
查看>>
[转载] 55分钟学会正则表达式
查看>>
分布式技术追踪 2017年第八期
查看>>
日期相关
查看>>
面向对象编程
查看>>
P3287 [SCOI2014]方伯伯的玉米田
查看>>