原文:http://kingj.iteye.com/blog/1436761

在Java中当try、finally语句中包含return语句时,执行情况到底是怎样的,finally中的代码是否执行,大家众说纷纭,有的说会执行,有的说不会执行,到底哪种说法正确,现在通过下面的例子加以说明:

第一种情况:try中包含return语句,finally中不包含

  1. public class TestTry {
  2. static String s="";
  3. public static void main(String args[]){
  4. s = test1();
  5. System.out.println("8  "+s);
  6. }
  7. public static String test1(){
  8. try{
  9. System.out.println("try.....");
  10. return s = "a";
  11. }
  12. finally{
  13. s="b";
  14. System.out.println("17  "+s);
  15. }
  16. }
  17. }

这里我们定义了一个字符串 s,在try里面将"a"赋值给s,并直接返回,在finally里面把"b"赋值给s,最终s的值是a还是b呢?下面是执行的结果

  1. try.....
  2. 17  b
  3. 8  a

我们发现最后的结果是a,但是b优先于a打印出来了,这是为什么呢?通过debug单步调试我们发现,在执行try中的return之前会先执行finally中的代码,之后再执行return语句。如果finally中也包含return语句,会出现什么情况呢,我们看第二种情况。

第二种情况:try,finally中都包含return语句

我们将上面的代码稍作改动

  1. public class TestTry {
  2. static String s="";
  3. public static void main(String args[]){
  4. s = test1();
  5. System.out.println("8  "+s);
  6. }
  7. public static String test1(){
  8. try{
  9. System.out.println("try.....");
  10. return s = "a";
  11. }
  12. finally{
  13. return s="b";
  14. }
  15. }
  16. }

将finally中的s="b";直接改成return s="b";,会出现什么样的结果呢?字符串s是a还是b呢?

  1. try.....
  2. 8  b

我们发现最后的打印结果是b。

Java中try、finally语句中有return时的执行情况 [转]的更多相关文章

  1. try catch finally ,try 中有return时怎么执行

  2. 在java中,异常抛出点后程序的执行情况

    1.在throw语句,即自定义的抛出异常语句后面的代码并不会执行,会提示错误,编译器并不可以正常编译. 2.若在一个条件语句中抛出一个异常,程序可以编译,但不会运行(dead code). 3.若在一 ...

  3. Java中的if-else语句——通过示例学习Java编程(7)

      作者:CHAITANYA SINGH 来源:https://www.koofun.com/pro/kfpostsdetail?kfpostsid=18 当我们需要根据一个条件执行一组语句时,我们需 ...

  4. Java中的switch语句后面的控制表达式的数据类型

    Java中的switch语句后面的控制表达式的数据类型 1.byte 2.char 3.short 4.int 5.枚举类型 6.Java 7允许java.lang.String类型

  5. Java中关于static语句块的理解

    Java中关于static语句块的理解 一.static块会在类被加载的时候执行且仅会被执行一次,一般用来初始化静态变量和调用静态方法. 实例一 public class A{ String name ...

  6. java中break、continue、return作用

    java中break.continue.return作用 0.首先要明确:break和continue是作用对象是循环体:而return的作用对象是方法 break:在执行完本次循环后,跳出所在的循环 ...

  7. try、finally代码块有无return时的执行顺序

    结论: 1.不管有没有出现异常,finally块中代码都会执行:2.当try和catch中有return时,finally仍然会执行:3.finally是在return后面的表达式运算后执行的(此时并 ...

  8. 关于java中构造方法、实例初始化、静态初始化执行顺序

    在Java笔试中,构造方法.实例初始化.静态初始化执行顺序,是一个经常被考察的知识点. 像下面的这道题(刚刚刷题做到,虽然做对了,但是还是想整理一下) 运行下面的代码,输出的结果是... class ...

  9. Java笔试面试总结—try、catch、finally语句中有return 的各类情况

    前言 之前在刷笔试题和面试的时候经常会遇到或者被问到 try-catch-finally 语法块的执行顺序等问题,今天就抽空整理了一下这个知识点,然后记录下来. 正文 本篇文章主要是通过举例的方式来阐 ...

随机推荐

  1. SparkThriftServer 源码分析

    目录 版本 起点 客户端--Beeline 服务端 Hive-jdbc TCLIService.Iface客户端请求 流程 SparkThrift 主函数HiveThriftServer2 Thrif ...

  2. linux下用php将doc、ppt转图片

    解决方案分成两步: (1)调用unoconv命令将 doc.ppt 转 pdf (2)使用 imagemagick将 pdf 转图片 步骤 1.安装unoconv sudo apt-get insta ...

  3. [原]win10下编译lua5.3.4

    1.下载lua源码http://www.lua.org/ftp/ 2.打开vs2012工具命令提示 3.cd 到lua源码的src目录 4.依次执行以下代码 cl /MD /O2 /c /DLUA_B ...

  4. TIJ -- 任务间使用管道进行输入/输出

    1. 通过输入/输出在线程间进行通信通常很有用.提供线程功能的类库以“管道”的形式对线程间的输入/输出提供了支持.它们在Java输入/输出类库中的对应物就是PipedWriter类(允许任务向管道写) ...

  5. python使用requests发送application/json报文数据

    def client_post_jsondata_requests(request_url,requestJSONdata): #功能说明:发送json请求报文到指定的地址并获取请求响应报文 #输入参 ...

  6. vim不支持鼠标中键拷贝粘贴

    ubuntu 和mint默认安装的vim是不支持系统剪切.粘贴版的,需要执行以下安装:sudo apt-get install vim-gnome

  7. [原]Docker-issue(1) image name 显示为 <none>

    问题:今天发现重新上传新的image的时候覆盖了原来的镜像后,REPOSITORY 就变为了 <none> ,如下图 解决办法: 使用tag重新命名image 问题解决:

  8. Tomb Raider

    Lara Croft, the fiercely independent daughter of a missing adventurer, must push herself beyond her ...

  9. 浏览器打开exe文件

    <win-r> regedit 打开注册表,然后自定义协议 自定义协议注册表.reg 打开后导入 Windows Registry Editor Version 5.00 [HKEY_CL ...

  10. zepto.js的touch模块

     touch库实现了什么和引入背景 touch模块是基于zepto.js的. click事件在移动端上会有 300ms 的延迟,同时因为需要 长按 , 双触击 等富交互,所以我们通常都会引入类似 ze ...