打好基础之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执行顺序 的相关文章

  • Ubuntu apt-get install 报错Try ‘apt --fix-broken install‘ with no packages (or specify a solution).

    64 toc 报错 更新镜像 更新镜像的时候修改配置文件 xff08 先修改配置文件的权限 xff09 GCC 安装错误 Recommends libc6 dev but it is not going to be installed or
  • [Errno 256] No more mirrors to try.解决过程

    今天在Linux服务器上安装rdesktop安装包的时候遇到该报错 xff0c 如图所示 xff1a df h查看挂载盘信息 xff0c 发现光驱未挂载 我设置的挂载光驱路径为 media cdrom 解决过程 xff1a 1 挂载光驱 m
  • java中try 与catch的使用

    try 代码区 catch Exception e 异常处理 代码区如果有错误 xff0c 就会返回所写异常的处理 首先要清楚 xff0c 如果没有try的话 xff0c 出现异常会导致程序崩溃 而try则可以保证程序的正常运行下去 xff
  • Java面向对象之异常处理机制(try-catch-finally、throws、自定义异常)

    文章目录 一 异常与异常分类二 异常处理机制1 try catch处理2 try catch finally处理3 throws可能抛异常 xff08 少用 xff09 4 throw抛出异常 xff08 少用 xff09 三 自定义异常
  • 错误:try using -rpath or -rpath-link

    在使用到动态库的时候 xff0c 出现错误如下 xff1a arm linux bin span class hljs keyword ld span warning libssl span class hljs preprocessor
  • c++_exception异常,try和catch,noexcept,throw

    catalog noexcept 函数base自定义异常类noexcept 和 throw noexcept 函数 bool f 61 noexcept func 判断 func 函数 是否有标记noexcept base throw 是
  • 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
  • 远程登录阿里云服务器时,提示Permission denied, please try again.

    在使用ssh命令 xff0c 远程登录阿里云服务器时 xff0c 提示Permission denied please try again 百分之九十的可能 xff1a 你的密码错了 xff01 你需要注意的是 xff0c 我们的实例有两个
  • OpenMP task 原理与实例

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

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

    我编写了七个测试用例来理解finally堵塞 背后的逻辑是什么finally works package core public class Test public static void main String args new Test
  • try-catch-finally 错误

    我遇到了问题 最终完成了尝试捕获 我完成了一切正常 直到捕获 我的代码错误都说 预期的 catch 语法错误 我已经进行了谷歌搜索 但没有找到有效的东西 我已附上我的代码 这只是一个放置错误 还是我没有抛出正确类型的错误 提前致谢 publ
  • 我们可以在finally块中使用“return”吗[重复]

    这个问题在这里已经有答案了 我们可以使用 return 语句吗finally堵塞 这会导致任何问题吗 从a内返回finally阻塞会导致exceptions丢失 finally 块内的 return 语句将导致 try 或 catch 块中
  • 最后进入异常处理

    到底是什么作用finally阻止异常处理执行 它保存应该始终执行的代码 无论是否发生异常 例如 如果您打开了一个文件 则应该在finally阻止以确保它始终处于关闭状态 如果您将其关闭try块 较早的异常将导致执行直接跳转到catch阻止并
  • 使用 C++ lambda 正确实现 finally 块

    我想实施一个finally我的 C 程序中的块 并且该语言当然有工具来完成它 如果不是本地工具的话 我想知道做到这一点的最佳方法是什么 这个简单的实现似乎是 100 安全的 template lt typename t gt class s
  • 哪里需要finally?

    我知道如何使用 try catch finally 但是我没有得到使用的好处finally因为我总是可以将代码放在 try catch 块之后 有没有明确的例子 它几乎总是用于清理 通常通过隐式using陈述 FileStream stre
  • PHP 中的“finally”关键字的作用是什么?

    考虑这两个例子 and
  • 在finally块中抛出异常

    有没有一种优雅的方式来处理抛出的异常finally block 例如 try Use the resource catch Exception ex Problem with the resource finally try resourc
  • .NET 会停止调试运行finally 块中的代码吗?

    好吧 我已经读到 并了解到 finally 块并不总是执行其代码 即使除了拔掉插头之外 仅供参考有关更多信息 请参阅尝试抓住最后的问题 https stackoverflow com questions 3304308 try catch
  • python多个 except 执行同一个方法时如何避免重复?

    我有如下代码块 try method except ErrorType1 todo return except ErrorType2 as e todo raise e 基本上对于两种错误类型 我需要执行todo 首先 然后return o

随机推荐