try finally中return count++等情况下,返回值的理解

本文通过实例代码分析并结合字节码解释了在`try-finally`结构中,return语句与finally块如何交互,特别是当finally中包含return时,如何处理返回值。在finally中有return的情况下,try块的返回值会被保存,finally中的修改不会影响已保存的返回值,导致了意外的结果。而如果没有return,finally块执行完毕后会返回try块的计算结果。

前言

首先有如下代码:

package hpsyche.string;

/**
 * @author Hpsyche
 */
public class MyTest {
   
   
    static Integer count=10;
    static Integer method(){
   
   
        return count++;
    }
    public static void main(String[] args) {
   
   
        System.out.println(method());
    }
}

可以看到输出结果为10,结果合理,先return count,再++;

引入

再看如下例:

public class MyTest {
   
   
    static Integer count=10;
    static Integer method(){
   
   
        try{
   
   
            return count++;
        }finally {
   
   
            return count
在Python中,`return` 是一个非常重要的关键字,主要用于函数中,以下是它的常见用法: ### 跳出函数 在函数中,一旦执行到 `return` 语句,函数就会立即停止执行,并返回到调用该函数的地方。例如: ```python def num1(): print('欢迎练习return !') return print('hello!') num1() ``` 在这个例子中,`return` 语句之后的 `print('hello!')` 不会被执行,因为 `return` 使函数提前结束了[^1]。 ### 返回值 `return` 可以将函数的计算结果返回给调用者。如果没有指定返回值,函数默认返回 `None`。示例如下: ```python def add(a, b): return a + b result = add(3, 5) print(result) # 输出 8 ``` 此例中,`add` 函数通过 `return` 将 `a` 和 `b` 的和返回给调用者,调用 `add(3, 5)` 得到的返回值赋给 `result` 变量并打印输出[^2]。 ### 在 `try - finally` 结构中的特殊情况 默认情况下,遇见 `return` 函数就会返回给调用者,但是在 `try - finally` 结构中情况有所不同。即使 `try` 块中有 `return` 语句,`finally` 块中的代码也会在返回之前执行。示例代码如下: ```python def func(): try: print(666) return 'ok' finally: print(666) print(func()) ``` 在这个函数中,`try` 块里的 `return 'ok'` 会在 `finally` 块执行完之后才返回给调用者,最终输出结果为两行 `666` 和 `ok`[^3]。 ### 函数作为返回值返回(闭包函数) 可以让 `return` 返回一个函数,这通常用于创建闭包函数。示例如下: ```python def sum1(*args): def sum2(): x = 0 for i in args: x = x + i return x return sum2 a = sum1(1, 2, 3) print(a()) # 输出 6 ``` 在这个例子中,`sum1` 函数返回了内部定义的 `sum2` 函数,`a` 实际上是 `sum2` 函数的引用,调用 `a()` 就会执行 `sum2` 函数,并计算传入 `sum1` 函数的参数之和[^3]。 ### 返回一个函数列表 `return` 还可以返回一个包含多个函数的列表。示例如下: ```python def count(): fs = [] for i in range(1, 4): def f(): return i * i fs.append(f) return fs f1, f2, f3 = count() print(f1()) print(f2()) print(f3()) ``` 这个例子中,`count` 函数返回一个包含三个函数的列表,但是需要注意的是,由于闭包的特性,这三个函数引用的 `i` 最终都是 `3`,所以输出结果都是 `9`[^3]。 ### 在循环中提前结束并返回结果 在函数的循环结构里,`return` 可以提前结束循环并返回结果。示例如下: ```python def count(): count = 0 while True: count += 1 if count == 10: return count x = count() print(x) # 输出 10 ``` 在这个 `while` 循环中,当 `count` 等于 `10` 时,执行 `return count` 语句,函数结束并返回 `count` 的值[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值