原文: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. idea设置条件断点

    只有在指定的条件下才触发断点,在idea中如何设置呢? 方法: 按Ctrl+Shift+F8弹出View Breakpoints 在Condition设置触发条件 结果: 源码 https://git ...

  2. SAP FICO 凭证导入接口 数据xml格式

    接口传入参数说明 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xm ...

  3. ss搭建

    aliyun ecs ,hongkong , t5 , 1M, 1.卸载阿里云盾监控 wget http://update.aegis.aliyun.com/download/uninstall.sh ...

  4. JS数组常用方法总结

    JavaScript中创建数组有两种方式 (一)使用 Array 构造函数: var arr1 = new Array(); //创建一个空数组 var arr2 = new Array(20); / ...

  5. IOS 圆形进度条

    // // CCProgressView.h // Demo // // Created by leao on 2017/8/7. // Copyright © 2017年 zaodao. All r ...

  6. 公司中springcloud项目遇到的问题

    1.更改maven的.m2下的settings.xml文件,程序就可以运行,是不是很神奇?

  7. K - Heavy Cargo dijkstar

    来源poj2263 Big Johnsson Trucks Inc. is a company specialized in manufacturing big trucks. Their lates ...

  8. 微信小程序模拟点击出现问题解决方法

    move tools=>sensors=>Touch:Device-based 如果不行就换成Touch:force enabled,这俩个选择反复更换试试

  9. 传纸条---(dp)

    题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个mmm行nnn列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了. ...

  10. Javaweb实现对mongodb的增删改查(附带源代码)

    运行截图: 删除后的信息 项目源代码:https://www.cnblogs.com/post/readauth?url=/zyt-bg/p/9807396.html