Java中try、finally语句中有return时的执行情况 [转]
原文:http://kingj.iteye.com/blog/1436761
在Java中当try、finally语句中包含return语句时,执行情况到底是怎样的,finally中的代码是否执行,大家众说纷纭,有的说会执行,有的说不会执行,到底哪种说法正确,现在通过下面的例子加以说明:
第一种情况:try中包含return语句,finally中不包含
- public class TestTry {
- static String s="";
- public static void main(String args[]){
- s = test1();
- System.out.println("8 "+s);
- }
- public static String test1(){
- try{
- System.out.println("try.....");
- return s = "a";
- }
- finally{
- s="b";
- System.out.println("17 "+s);
- }
- }
- }
这里我们定义了一个字符串 s,在try里面将"a"赋值给s,并直接返回,在finally里面把"b"赋值给s,最终s的值是a还是b呢?下面是执行的结果
- try.....
- 17 b
- 8 a
我们发现最后的结果是a,但是b优先于a打印出来了,这是为什么呢?通过debug单步调试我们发现,在执行try中的return之前会先执行finally中的代码,之后再执行return语句。如果finally中也包含return语句,会出现什么情况呢,我们看第二种情况。
第二种情况:try,finally中都包含return语句
我们将上面的代码稍作改动
- public class TestTry {
- static String s="";
- public static void main(String args[]){
- s = test1();
- System.out.println("8 "+s);
- }
- public static String test1(){
- try{
- System.out.println("try.....");
- return s = "a";
- }
- finally{
- return s="b";
- }
- }
- }
将finally中的s="b";直接改成return s="b";,会出现什么样的结果呢?字符串s是a还是b呢?
- try.....
- 8 b
我们发现最后的打印结果是b。
Java中try、finally语句中有return时的执行情况 [转]的更多相关文章
- try catch finally ,try 中有return时怎么执行
- 在java中,异常抛出点后程序的执行情况
1.在throw语句,即自定义的抛出异常语句后面的代码并不会执行,会提示错误,编译器并不可以正常编译. 2.若在一个条件语句中抛出一个异常,程序可以编译,但不会运行(dead code). 3.若在一 ...
- Java中的if-else语句——通过示例学习Java编程(7)
作者:CHAITANYA SINGH 来源:https://www.koofun.com/pro/kfpostsdetail?kfpostsid=18 当我们需要根据一个条件执行一组语句时,我们需 ...
- Java中的switch语句后面的控制表达式的数据类型
Java中的switch语句后面的控制表达式的数据类型 1.byte 2.char 3.short 4.int 5.枚举类型 6.Java 7允许java.lang.String类型
- Java中关于static语句块的理解
Java中关于static语句块的理解 一.static块会在类被加载的时候执行且仅会被执行一次,一般用来初始化静态变量和调用静态方法. 实例一 public class A{ String name ...
- java中break、continue、return作用
java中break.continue.return作用 0.首先要明确:break和continue是作用对象是循环体:而return的作用对象是方法 break:在执行完本次循环后,跳出所在的循环 ...
- try、finally代码块有无return时的执行顺序
结论: 1.不管有没有出现异常,finally块中代码都会执行:2.当try和catch中有return时,finally仍然会执行:3.finally是在return后面的表达式运算后执行的(此时并 ...
- 关于java中构造方法、实例初始化、静态初始化执行顺序
在Java笔试中,构造方法.实例初始化.静态初始化执行顺序,是一个经常被考察的知识点. 像下面的这道题(刚刚刷题做到,虽然做对了,但是还是想整理一下) 运行下面的代码,输出的结果是... class ...
- Java笔试面试总结—try、catch、finally语句中有return 的各类情况
前言 之前在刷笔试题和面试的时候经常会遇到或者被问到 try-catch-finally 语法块的执行顺序等问题,今天就抽空整理了一下这个知识点,然后记录下来. 正文 本篇文章主要是通过举例的方式来阐 ...
随机推荐
- SparkThriftServer 源码分析
目录 版本 起点 客户端--Beeline 服务端 Hive-jdbc TCLIService.Iface客户端请求 流程 SparkThrift 主函数HiveThriftServer2 Thrif ...
- linux下用php将doc、ppt转图片
解决方案分成两步: (1)调用unoconv命令将 doc.ppt 转 pdf (2)使用 imagemagick将 pdf 转图片 步骤 1.安装unoconv sudo apt-get insta ...
- [原]win10下编译lua5.3.4
1.下载lua源码http://www.lua.org/ftp/ 2.打开vs2012工具命令提示 3.cd 到lua源码的src目录 4.依次执行以下代码 cl /MD /O2 /c /DLUA_B ...
- TIJ -- 任务间使用管道进行输入/输出
1. 通过输入/输出在线程间进行通信通常很有用.提供线程功能的类库以“管道”的形式对线程间的输入/输出提供了支持.它们在Java输入/输出类库中的对应物就是PipedWriter类(允许任务向管道写) ...
- python使用requests发送application/json报文数据
def client_post_jsondata_requests(request_url,requestJSONdata): #功能说明:发送json请求报文到指定的地址并获取请求响应报文 #输入参 ...
- vim不支持鼠标中键拷贝粘贴
ubuntu 和mint默认安装的vim是不支持系统剪切.粘贴版的,需要执行以下安装:sudo apt-get install vim-gnome
- [原]Docker-issue(1) image name 显示为 <none>
问题:今天发现重新上传新的image的时候覆盖了原来的镜像后,REPOSITORY 就变为了 <none> ,如下图 解决办法: 使用tag重新命名image 问题解决:
- Tomb Raider
Lara Croft, the fiercely independent daughter of a missing adventurer, must push herself beyond her ...
- 浏览器打开exe文件
<win-r> regedit 打开注册表,然后自定义协议 自定义协议注册表.reg 打开后导入 Windows Registry Editor Version 5.00 [HKEY_CL ...
- zepto.js的touch模块
touch库实现了什么和引入背景 touch模块是基于zepto.js的. click事件在移动端上会有 300ms 的延迟,同时因为需要 长按 , 双触击 等富交互,所以我们通常都会引入类似 ze ...