坚强的Finally

finally()很坚强,就算在try{}或者catch{}中已经返回了,但是finally()中的代码依旧会执行!


        public bool testFinallly()
        {

            int a = 0;

            try
            {
                a = 10;
                Console.WriteLine("Try");
                return true;

            }

            catch
            {
                Console.WriteLine("Catch");
                return false;

            }

            finally
            {
                a = 99;
                Console.WriteLine("finally , a={0}",a.ToString());
                //return true;//编译错误:控制不能离开finally子句主体

            }

            Console.WriteLine("out of finally");

        }


最后会输出:

Try

finally ,a=99



### Finally 关键字的定义与用途 `finally` 是一种在异常处理机制中使用的结构化控制语句的关键部分。它通常用于 `try-catch-finally` 块中,表示无论是否发生异常,都需要执行的一段代码[^5]。即使程序抛出了未捕获的异常或者提前退出循环,`finally` 中的内容仍然会被执行。 以下是典型的 `try-catch-finally` 结构示例: ```java public class Example { public static void main(String[] args) { try { int result = divide(10, 0); System.out.println("Result: " + result); } catch (ArithmeticException e) { System.err.println("Error: Division by zero."); } finally { System.out.println("This block will always execute."); } } public static int divide(int a, int b) throws ArithmeticException { if (b == 0) throw new ArithmeticException(); return a / b; } } ``` 在这个例子中,如果尝试除以零,则会触发 `ArithmeticException` 并进入 `catch` 块;然而无论如何,`finally` 都会在最后被执行并打印消息。 #### 特殊情况下的行为分析 需要注意的是,在某些极端情况下,例如 JVM 被强制终止或线程被中断时,`finally` 可能不会得到完全保障的机会来运行其内部逻辑[^6]。因此开发者应谨慎对待那些依赖于 `finally` 来完成资源释放的任务。 另外值得注意的一个点是,尽管存在多个返回路径的情况下(即通过不同分支分别设置了不同的返回值),只要这些路径均经过同一个 `try...finally` 构造体覆盖范围之内的话,那么最终都将先经历 `finally` 执行过程再继续后续操作流程[^7]。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值