关于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中的返回值。
关于finally中的语句和try中的return之间的执行顺序的更多相关文章
- 查询语句中select from where group by having order by的执行顺序
查询语句中select from where group by having order by的执行顺序 1.查询中用到的关键词主要包含六个,并且他们的顺序依次为 select--from--w ...
- 错误处理之try、catch、finally中的return、throw执行顺序。
今天遇到一个让人无语的代码块 try { bilSheetService.syncUser(bilWebseviceLog, userId, optType); }catch (Exception e ...
- 查询语句中 select from where group by having order by 的执行顺序
查询中用到的关键词主要包含六个,并且他们的顺序依次为 select--from--where--group by--having--order by 其中 select 和 from 是必须的,其他关 ...
- java中的异常以及 try catch finally以及finally的执行顺序
java中的 try.catch.finally及finally执行顺序详解: 1.首相简单介绍一下异常以及异常的运行情况: 在Java中异常的继承主要有两个: Error和Exception 这两个 ...
- Qt中连接到同一signal的多个slots的执行顺序问题(4.6以后按连接顺序执行)
起源 前些天忘记在哪儿讨论过这个问题,今天在csdn又看到有网友问这个问题,而其他网友却无一例外的给出了“无序”这个答案. Manual Qt的问题,当manual中有明确文字说明时,我们应该以Qt的 ...
- Qt中连接到同一signal的多个slots的执行顺序问题(现在是看连接顺序,以前是无序的)
in the order they have been connected 起源 前些天忘记在哪儿讨论过这个问题,今天在csdn又看到有网友问这个问题,而其他网友却无一例外的给出了“无序”这个答案. ...
- java中代码块和构造方法以及普通方法的代码执行顺序总结
说实话,这块真的不好理解啊~都怪jvm 执行顺序搞这么复杂,哼╭(╯^╰)╮ 但是 我们能怎么办,只能研究呗!!! !:首先,毫无置疑的,静态代码块在加载时就执行了,所以肯定是最先执行的.... ...
- SQL Server 2008 r2 中 SQL语句提示“对象名无效”,但可执行
[问题描述]在使用 SQL Server 2008 r2 时,有时在完成SQL书写后,会提示“对象名无效”,而SQL语句可正常执行. [原因]缓存相关. [解决方法]ctrl+shift+R 刷新下, ...
- Java中Return和Finally执行顺序的实现
下面这段代码的执行结果是怎样的呢? publc int test(){ int x; try{ x = 1; return x; }catch(Exception e){ x = 2; return ...
随机推荐
- Java学习(十)
今天学习的是参数的传入,感觉这个和c++差不多. 传一个参数进去,要看这个参数是地址还是一个值,如果是值的话那无论在方法中如何加减,也只是另一个局部变量的事情了,与该参数无关,在原方法中参数的值保持不 ...
- Linux基础四:软件包管理
四.软件包管理器: 1.概念 红帽有两款软件包管理器,分别是rpm和yum. 1.rpm软件包管理器 -> 用来安装单个包 -> .rpm文件 红帽的安装包文件,都放在Packag ...
- 会话Cookie与session的关系
在通常的使用中,我们只知道session信息是存放在服务器端,而cookie是存放在客户端.但服务器如何使用session和客户端之间进行通信,以及jsessionId是怎么回事,这并没有一个完整和正 ...
- 【Microsoft Azure 的1024种玩法】五、基于Azure Cloud Shell 一站式创建Linux VM
[文章简介] Azure Cloud Shell 是一个用于管理 Azure 资源的.可通过浏览器访问的交互式经验证 shell. 它使用户能够灵活选择最适合自己工作方式的 shell 体验,无论是 ...
- Redis | 第4章 Redis中的数据库《Redis设计与实现》
目录 前言 1. Redis中的数据库 2. 数据库的键空间 3. 键的生成时间与过期时间 4. Redis中的过期键删除策略 5. AOF.RDB和复制功能对过期键的处理 5.1 生成 RDB 文件 ...
- es的rest风格的api文档
rest风格的api put http://127.0.0.1:9200/索引名称/类型名称/文档id (创建文档,指定文档id) post http://127.0.0.1:9200/索引名称/类型 ...
- 【POJ3614 Sunscreen】【贪心】
题面: 有c头牛,需要的亮度在[min_ci,max_ci]中,有n种药,每种m瓶,可以使亮度变为v 问最多能满足多少头牛 算法 我们自然考虑贪心,我们首先对每头牛的min进行排序,然后对于每种药,将 ...
- DirectX12 3D 游戏开发与实战第九章内容(下)
仅供个人学习使用,请勿转载.谢谢! 9.纹理贴图 学习目标 学习如何将局部纹理映射到网格三角形中 探究如何创建和启用纹理 学会如何通过纹理过滤来创建更加平滑的图像 探索如何使用寻址模式来进行多次贴图 ...
- DirectX12 3D 游戏开发与实战第六章内容
利用Direct3D绘制几何体 学习目标 探索用于定义.存储和绘制几何体数据的Direct接口和方法 学习编写简单的顶点着色器和像素着色器 了解如何用渲染流水线状态对象来配置渲染流水线 理解怎样创建常 ...
- getdelim函数
利用getdelim函数分割读取字段,将文件制表符替换为空格符 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int main( ...