我所不了解的try{ return }finally{}中的return!

背景

  • 四月初一篇文章《你真的了解try{ return }finally{}中的return?》引起了大家的关注,本文介绍了try、finally同时操作一个数据所经历的过程。

  • 但是因为作者用值类型作为举例类型,我心里就难免怀疑它对引用类型的操作是怎么样的,自己测试代码,还真的出现了问题,我自己无法解决。希望大神给我点提示。


  • 代码

    class Program
        {
            static void Main(string[] args)
            {
                Program t = new Program();
                int y = t.aaa();
                List<string> list = t.GetList();

    Console.ReadLine();
            }

    public int aaa()
            {
                int x = 1;

    try
                {
                    return ++x;
                }
                catch (Exception e)
                {

    }
                finally
                {
                    ++x;
                }
                return x;
            }

    public List<string> GetList()
            {
                var list = new List<string>() { "aaa" };
                try
                {
                    list.Add("bbb");
                    return list;
                }
                catch (Exception)
                {

    }
                finally
                {
                    list.Add("ccc");
                }
                return list;
            }
        }


    疑问

    如果按照原作者的逻辑,GetList()这个方法返回的应该是包含“aaa”,“bbb”两个字符串的list,但是结果却返回了“aaa”“bbb”“ccc”三个数据的list,而且最变态的是,如果我将这个方法改为返回list.Count,返回的结果是2,希望大神能帮我解释一下原因?


    时间: 2024-10-10 11:09:50
  • 我所不了解的try{ return }finally{}中的return!的相关文章

    你真的了解try{ return }finally{}中的return?(转)

    今天去逛论坛 时发现了一个很有趣的问题: 谁能给我我解释一下这段程序的结果为什么是:2.而不是:3 代码如下: class Test { public int aaa() { int x = 1; try { return ++x; } catch (Exception e) { } finally { ++x; } return x; } public static void main(String[] args) { Test t = new Test(); int y = t.aaa();

    你真的了解try{ return }finally{}中的return?

    转载:http://www.cnblogs.com/averey/p/4379646.html 今天去逛论坛 时发现了一个很有趣的问题: 谁能给我我解释一下这段程序的结果为什么是:2.而不是:3 代码如下: class Test { public int aaa() { int x = 1; try { return ++x; } catch (Exception e) { } finally { ++x; } return x; } public static void main(String

    你真的了解try{ return }finally{}中的return?(转载)

    发现一篇有意思的博文,分享一下 谁能给我我解释一下这段程序的结果为什么是:2.而不是:3 代码如下: class Test { public int aaa() { int x = 1; try { return ++x; } catch (Exception e) { } finally { ++x; } return x; } public static void main(String[] args) { Test t = new Test(); int y = t.aaa(); Syst

    你真的了解try{ return }finally{}中的return?【转】

    今天去逛论坛 时发现了一个很有趣的问题: 谁能给我我解释一下这段程序的结果为什么是:2.而不是:3 代码如下: class Test { public int aaa() { int x = 1; try { return ++x; } catch (Exception e) { } finally { ++x; } return x; } public static void main(String[] args) { Test t = new Test(); int y = t.aaa();

    finally中使用return会吃掉catch中抛出的异常

    今天学习大神的文章:深入理解java异常处理机制 学到一个有意思的知识点.如果在finally中使用return会吃掉catch中抛出的异常. 看例子: [java] view plaincopy public class TestException { public TestException() { } boolean testEx() throws Exception { boolean ret = true; try { ret = testEx1(); } catch (Excepti

    try catch finally语句块中存在return语句时的执行情况剖析

    2种场景 (1) try中有return,finally中没有return(注意会改变返回值的情形);(2) try中有return,finally中有return; 场景代码分析(idea亲测) 场景一: 1 //实例一:try中有return,finally中没有return 2 public class TryReturnFinally { 3 public static void main(String[] args) { 4 System.out.println(test()); 5

    php 显示php 中数组return Array

    php 读取文本中数组,修改指定数组键值.达到统计下载文件排行. <?php header("Content-type:text/html;charset=utf-8");if(isset($_GET['down_id']) && !empty($_GET['down_id'])){ $down_id = $_GET['down_id']; $file='down_id.php'; $du = require_once($file); arsort($du); i

    造轮子_C#中yield return用法分析

    厂址: http://www.jb51.net/article/54810.htm static List<int> GetInitialData() {   return new List<int>(){1,2,3,4}; } 打印出所有值大于2的元素 不使用yield return的实现 static IEnumerable<int> FilterWithoutYield() {   List<int> result = new List<int&

    Java中关于return和finally的问题

    这两天学到了异常机制,其中try...catch...finally个人觉得算是重要的一环,联系到之前学的语句,遇到了return和finally这个好玩的问题,经过试验,发现计算机语言这种逻辑关系果然微妙,以下是自己的见解,若有不对之处,望各位前辈指点: 首先看第一段代码 1 public class return_finally{ 2 public static void main(String[] args){ 3 System.out.println( m_1() ); 4 } 5 pu