return研究


public static int f(){ try{ return 1; }finally{ return 2; } }

答案:

返回2,可能jvm认为一个方法里面有两个return语句并没有太大的意义,所以try中的return语句给忽略了,直接起作用的是finally中的return语句。

    public static final String test() {
        String t = "";
 
        try {
            t = "try";
            return t;
        } catch (Exception e) {
            // result = "catch";
            t = "catch";
            return t;
        } finally {
            t = "finally";
        }
    }

答案:

返回try,通过分析字节码,在try语句的return块中return返回的引用变量t并不是try语句外定义的引用变量t,而是系统重新定义了一个局部引用t,这个引用指向了引用t对应的值,也就是try。即使在finally语句中把引用t指向了值finally,因为return的返回引用已经不是t,所以引用t的对应的值和try语句中的返回值无关了。

    public static final String test() {
        String t = "";

        try {
            t = "try";
            Integer.parseInt(null);
            return t;
        } catch (Exception e) {
            t = "catch";
            return t;
        } finally {
            t = "finally";
            // System.out.println(t);
            // return t;
        }
    }

答案:

返回catch,原理同上。

    public static final String test() {
        String t = "";

        try {
            t = "try";
            Integer.parseInt(null);
            return t;
        } catch (Exception e) {
            t = "catch";
            Integer.parseInt(null);
            return t;
        } finally {
            t = "finally";
            //return t;
        }
    }

答案:

直接报错。

    public static final String test() {
        String t = "";

        try {
            t = "try";
            Integer.parseInt(null);
            return t;
        } catch (Exception e) {
            t = "catch";
            Integer.parseInt(null);
            return t;
        } finally {
            t = "finally";
            return t;
        }
    }

答案:

返回finally。

转载于:https://www.cnblogs.com/coolgame/p/8795792.html

### STM32编程中的返回值用法 在嵌入式开发中,`return` 是一种常见的控制结构,用于从函数中退出并将结果传递给调用者。以下是有关 `return` 的具体用法及其在 STM32 编程中的应用: #### 函数返回值的作用 函数通过 `return` 关键字将其计算的结果传递回调用方。这种机制允许开发者分离逻辑处理和结果使用的过程。例如,在初始化外设时,可以通过返回值判断操作的成功与否。 ```c int initialize_gpio(void) { // 假设 GPIO 初始化失败的情况 if (some_error_condition()) { return -1; // 返回错误码表示失败 } return 0; // 成功则返回 0 表示无误 } ``` 在此代码片段中,`initialize_gpio()` 使用了两种可能的返回值:`-1` 表示发生错误,而 `0` 则表明成功[^1]。 #### 错误处理与返回值设计 良好的错误处理实践通常涉及定义一组标准的返回值以指示特定条件下的行为。这些约定有助于提高代码可读性和维护性。例如,可以采用 POSIX 风格的标准返回值(如 `-1` 表示通用错误),或者自定义枚举类型来增强语义清晰度。 ```c typedef enum { SUCCESS, ERROR_INVALID_PARAMETER, ERROR_HARDWARE_FAILURE, } result_t; result_t configure_spi(uint32_t baud_rate) { if (baud_rate == 0 || baud_rate > MAX_BAUD_RATE) { return ERROR_INVALID_PARAMETER; } if (!spi_hardware_ready()) { return ERROR_HARDWARE_FAILURE; } spi_set_baudrate(baud_rate); return SUCCESS; } ``` 上述例子展示了如何利用枚举类型作为更直观的方式表达复杂的状态信息[^4]。 #### 结合中断服务例程(ISR) 尽管 ISR 不应直接返回有意义的数据至主程序流程(因为它们是由硬件触发而非显式的函数调用),但在某些情况下仍需报告事件的发生情况。此时可通过全局变量间接实现这一目标: ```c volatile uint8_t button_pressed_flag = 0; void EXTI0_IRQHandler(void) { if (__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_0)) { __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_0); button_pressed_flag = 1; // 设置标志位通知主线程按键已被按下 } } // 主循环定期检查该标记 if(button_pressed_flag){ handle_button_event(); button_pressed_flag=0;// 清除标志以便下次检测 } ``` 这里展示了一个简单的外部中断处理过程,其中并没有传统意义上的 'return' ,而是依靠改变共享资源状态来进行跨上下文通讯[^4]。 #### 总结 综上所述,合理运用 `return` 可极大简化应用程序的设计思路,并提升整体质量。无论是基本类型的立即数还是复合数据结构乃至抽象概念映射后的编码方案都值得深入探讨研究
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值