打好基础之try-catch-finally执行顺序

2023-05-16

try-catch-finally是用来捕获异常,保证程序的执行。

先看一小段代码:

public class TryCatchDemo {
    public static void main(String[] args) {
        div(4, 0);
    }

    public static void div(int a, int b){
        try{
            System.out.println("try...");
            int d = a/b;
        }catch (Exception e){
            System.out.println("catch...");
        } finally {
            System.out.println("finally...");
        }
    }
}

执行输出:

try...
catch...
finally...

由此可见,try-catch-finally的执行顺序。

那如果加上return的各种情况呢?

继续下面试验

public class TryCatchDemo {
    public static void main(String[] args) {
        int d = div(4, 0);
        System.out.println("main..."+d);
    }

    public static int div(int a, int b){
        try{
            System.out.println("try...");
            int d = a/b;
            return d;
        }catch (Exception e){
            System.out.println("catch...");
            return 10;
        } finally {
            System.out.println("finally...");
        }
    }
}

执行输出:

try...
catch...
finally...
main...10
通过结果发现,异常时,finally依然执行。其实,只要程序不暴力退出,finally代码块始终会执行,所以,在开发中,finally中一般用来关闭资源。如关闭数据库连接,io流的关闭。

继续,如果我们在catch,finally代码块中执行改返回值操作,会怎么样?

public class TryCatchDemo {
    public static void main(String[] args) {
        int d = div(4, 2);
        System.out.println("main..."+d);
    }

    public static int div(int a, int b){
        int d;
        try{
            System.out.println("try...");
            d = a/b;
            return d;
        }catch (Exception e){
            System.out.println("catch...");
            d = 10;
        } finally {
            System.out.println("finally...");
            d = 11;
        }
        return d;
    }
}

执行结果:

try...
finally...
main...2

return的值依然是try中运算的值。其实,在try执行return时,会将结果存在栈区,然后去执行finally中的代码,如果finally中有return,就直接返回,如果finally中没有return,会将栈区的值返回。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

打好基础之try-catch-finally执行顺序 的相关文章

  • scp 报错: Permission denied, please try again(publickey,password)

    修改密码后导致报错 Permission denied please try again publickey password 修改 etc ssh sshd config 中 PermitRootLogin yes 修改为yes 重启服务
  • 错误:try using -rpath or -rpath-link

    在使用到动态库的时候 xff0c 出现错误如下 xff1a arm linux bin span class hljs keyword ld span warning libssl span class hljs preprocessor
  • try chatgpt api (by quqi99)

    作者 xff1a 张华 发表于 xff1a 2023 03 23 版权声明 xff1a 可以任意转载 xff0c 转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 chatgpt web 试了网上的一个chatgpt web
  • 使用 TRY/CATCH 语句解决 SQL Server 2005 死锁

    对于今天的 RDBMS 体系结构而言 xff0c 死锁难以避免 在高容量的 OLTP 环境中更是极为普遍 正是由于 NET 的公共语言运行库 CLR 的出现 xff0c SQL Server 2005 才得以为开发人员提供一种新的错误处理方
  • try catch里面try catch嵌套

    try catch里能否内嵌try catch xff1f 答案是肯定的 但是等内层try catch出异常之后是个什么执行顺序呢 xff1f 看下面代码 static void Main string args try Console W
  • how to solveE:Unmet dependencies.Try‘apt --fix ^^^^^

    span class token function sudo span span class token function apt span span class token function install span span class
  • 错误:try using -rpath or -rpath-link

    在使用到动态库的时候 xff0c 出现错误如下 xff1a arm linux bin span class hljs keyword ld span warning libssl span class hljs preprocessor
  • mysql执行顺序

    SQL Select语句完整的执行顺序 xff1a 1 from子句组装来自不同数据源的数据 xff1b 2 where子句基于指定的条件对记录行进行筛选 xff1b 3 group by子句将数据划分为多个分组 xff1b 4 使用聚集函
  • C++ -- 异常:try、throw、catch

    异常 申请内存的时候 xff0c 内存不够用 空间配置器申请失败 xff0c 不做处理 拷贝时内存错误 除数分母不能为0 等情况 会抛出异常 try throw catch 1 使用示例 1 xff09 除数为零 xff0c 情况 未处理情
  • 解决“Permission denied, please try again.”的问题

    在Ubuntu的终端输入命令 ssh highlight highlight是本地主机名称提示输入用户密码 当密码输入正确时 xff0c 仍返回错误 xff1a Permission denied please try again 解决的办
  • OpenMP task 原理与实例

    个人理解 Openmp自从3 0以后全面走向任务驱动 task机制非常重要 可以显式定义任务 而其余parallel代码块中不用task定义的实际上是隐式任务 抽象来说就是有两个池子 线程池与任务池 闲置的线程会在线程池等待任务 显式任务与
  • Promise的Catch报错总结

    在使用Promise时 异步返回的结果可能会两种 一种是使用resolve返回 另一种是使用reject返回 当使用reject返回时 会throw一个Error出来 这时的这个Error需要Catch住 在Promise中Catch一个E
  • C++异常处理

    如果你写的方法是给他人使用 那么 如果这个方法失败 最好是以抛异常的方式告诉别人 而不是在方法声明的地方写注释 0 成功 1 网络连接失败 3 参数错误 抛出异常 throw 1 抛出 int 类型异常 throw 1 2 抛出 doubl
  • 为什么我们使用finally块? [复制]

    这个问题在这里已经有答案了 据我所知 以下两个代码片段都具有相同的目的 为什么有finally完全阻塞吗 Code A try Some code catch Exception handling code finally Cleanup
  • try-catch-finally 错误

    我遇到了问题 最终完成了尝试捕获 我完成了一切正常 直到捕获 我的代码错误都说 预期的 catch 语法错误 我已经进行了谷歌搜索 但没有找到有效的东西 我已附上我的代码 这只是一个放置错误 还是我没有抛出正确类型的错误 提前致谢 publ
  • 最后进入异常处理

    到底是什么作用finally阻止异常处理执行 它保存应该始终执行的代码 无论是否发生异常 例如 如果您打开了一个文件 则应该在finally阻止以确保它始终处于关闭状态 如果您将其关闭try块 较早的异常将导致执行直接跳转到catch阻止并
  • 多重返回:哪一个设置最终的返回值?

    鉴于此代码 String test try return 1 finally return 2 语言规范是否定义了调用的返回值test 换句话说 在每个 JVM 中它总是相同的吗 在 Sun JVM 中 返回值是2 但我想确定 这不依赖于虚
  • .Net Framework:当未捕获异常时,不会调用Finally块[重复]

    这个问题在这里已经有答案了 一个简单的控制台应用程序 在 Visual Studio 2019 Net Framework 4 7 Windows 中 static void Main string args try Console Wri
  • 哪里需要finally?

    我知道如何使用 try catch finally 但是我没有得到使用的好处finally因为我总是可以将代码放在 try catch 块之后 有没有明确的例子 它几乎总是用于清理 通常通过隐式using陈述 FileStream stre
  • Java Try Catch Final 没有 Catch 的情况下会阻塞

    我正在审查一些新代码 该程序只有一个 try 和一个 finally 块 既然排除了 catch 块 那么如果 try 块遇到异常或任何可抛出的内容 它如何工作 它直接进入finally块吗 如果 try 块中的任何代码可以引发已检查异常

随机推荐