`
huangyongxing310
  • 浏览: 495883 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

Java finally语句到底是在return之前还是之后执行

阅读更多
Java finally语句到底是在return之前还是之后执行



1.没出现异常时,执行try块里return前的所有语句(包括return里的语句)->finally语句->try块里return指令。
2.出现异常时,执行try块里异常前的所有语句->catch语句->finally语句->try块外面的语句。
3.finally语句里有return时,try块外面不用有return,try块里面可以不用有return(因为会覆盖里面的return)
4.catch语句里有return,出现异常时,执行try块里异常前的所有语句->catch语句return指令n前的所有语句->finally语句->catch块里return指令。
5.finally语句里有return时,最后返回值以finally语句里的逻辑处理结果返回。
6.finally语句里没有return时,最后返回值以try(或catch)语句里的逻辑处理结果返回(finally语句的改变不会影响到那时的结果)(这与java引用传递与值传递相关)。



public class FinallyTest1 {

    public static void main(String[] args) {

        System.out.println(test1());
    }

    public static int test1() {
        int b = 20;

        try {
            System.out.println("try block");

            return b += 80;
        }
        catch (Exception e) {

            System.out.println("catch block");
        }
        finally {

            System.out.println("finally block");

            if (b > 25) {
                System.out.println("b>25, b = " + b);
            }
        }

        return b;
    }

}


运行结果是:
try block
finally block
b>25, b = 100
100


1.return语句已经执行了再去执行finally语句,不过并没有直接返回,而是等finally语句执行完了再返回结果。
2.finally语句是在try的return语句执行之后,return返回之前执行。


public class FinallyTest2 {

    public static void main(String[] args) {

        System.out.println(test2());
    }

    public static int test2() {
        int b = 20;

        try {
            System.out.println("try block");

            return b += 80;
        } catch (Exception e) {

            System.out.println("catch block");
        } finally {

            System.out.println("finally block");

            if (b > 25) {
                System.out.println("b>25, b = " + b);
            }

            return 200;
        }

        // return b;
    }

}


运行结果是:
try block
finally block
b>25, b = 100
200


1.finally块中的return语句会覆盖try块中的return返回。




参考原文:http://www.cnblogs.com/lanxuezaipiao/p/3440471.html
分享到:
评论

相关推荐

    Java finally语句到底是在return之前还是之后执行?

    1. 如果`try`块中的代码没有抛出异常,那么`finally`块会在`try`块结束时执行,之后控制权将传递给相应的`return`语句。 2. 如果`try`块中的代码抛出一个未捕获的异常,`finally`块仍然会执行,然后再将异常传递给...

    Java语言finally语句详解,finally到底是在return之前还是之后执行.zip

    Java语言finally语句详解,finally到底是在return之前还是之后执行.zip

    浅谈Java finally语句到底是在return之前还是之后执行(必看篇)

    那么,finally 语句是在 try 的 return 之前还是之后执行的呢?这个问题引起了很多人的探讨和争论。通过实验和示例,我们可以证明 finally 语句是在 try 的 return 语句执行之后,return 返回之前执行的。 在下面的...

    java 中finally语句块与return的执行关系

    在 Java 规范中规定,在 try-catch-finally 中,如果 try-finally 或者 catch-finally 中都有 return,则两个 return 语句都执行,并且最终返回到调用者那里的是 finally 中 return 的值;而如果 finally 中没有 ...

    Java中finally块执行与return关系深度剖析

    Java finally语句到底是在return之前还是之后执行?Java finally执行深度剖析,具体看这篇博文:http://blog.csdn.net/lanxuezaipiao/article/details/16922895,这是里面相关的源码,欢迎大家下载使用。

    try、catch、finally、return 执行顺序.doc

    在执行 try、catch、finally 语句时,finally 语句总是最后执行的,也就是说,即使在 try 或 catch 语句中有 return 语句,finally 语句仍然会执行。finally 语句是在 return 语句执行之后、返回之前执行的,这意味...

    Java中finally和return的关系实例解析

    finally语句是在try的return语句执行之后,return返回之前执行的。这意味着,如果在try块中执行了return语句,finally语句将在return语句执行之前执行。如果finally语句中包含了return语句,即使前面的catch块重新抛...

    关于Java中try finally return语句的执行顺序浅析

    还有情况是当一个线程在执行try语句块或者catch语句块时被打断(interrupted)或者被终止(killed),与其对应的finally语句块可能不会执行。还有更极端的情况,就是在线程运行try语句块或者catch语句块时,突然死机或者...

    Java异常处理中同时有finally和return语句的执行问题

    首先,`finally`块中的代码总是会被执行,除非程序在执行到`finally`块之前就退出了JVM(例如通过`System.exit()`)。即使在`try`块或`catch`块中有`return`语句,`finally`块内的代码也会在返回之前被执行。这是...

    关于Java中的try-catch-finally语句和return

    第一:return语句并不是函数的终出口,如果有finally语句,这在return之后还会执行finally(return的值会暂存在栈里面,等待finally执行后再返回)  第二:finally里面不建议放return语句,根据需要,return语句...

    java大厂面经、直击BAT

    ## 二.finally finally 一定会被执行,如果 finally 里有 return 语句,则覆盖 try/catch 里的 return , 比较爱考的是 finally 里没有 return 语句,这时... finally到底是在return之前执行还是return之后执行?

    Java的throw和return

    #### try-catch-finally语句 Java中的异常处理机制通常包括`try`、`catch`和`finally`三个关键字。`try`块包含了可能引发异常的代码;`catch`块则用于捕获并处理这些异常;而`finally`块无论是否发生异常都会被执行...

    浅谈Java中return和finally的问题

    在Java编程语言中,`return` 语句和 `finally` 语句的相互作用是一个重要的概念,尤其是在处理异常处理时。`finally` 语句块通常用于确保某些代码无论是否发生异常都会被执行,而 `return` 语句用于提前结束方法并...

    Blog:充当日常笔记或者个人博客吧

    Nginx配置文件详解Linux 安装JenkinsJAVA 多线程详解java 多线程学习How to create a Hello World with IntelliJ and Aspect JJava各种对象(...,JavaBeans)的区分Java finally语句到底是在return之前还是之后执行...

    完全解析Java编程中finally语句的执行原理

    举个例子,当`try`语句块在执行前就返回了(`return`语句)或抛出了异常,如果`try`块没有被执行,相应的`finally`块也不会执行。在清单1的示例中,由于`i = i / 0`导致了`ArithmeticException`,程序在进入`try`块...

    谈谈Java中try-catch-finally中的return语句

    在Java编程语言中,`try-catch-finally`语句块是异常处理的关键构造,它允许程序员优雅地处理可能出现的异常情况。`return`语句则用于从方法中返回一个值或者结束方法的执行。当这两者结合在一起时,就会出现一些...

    java流程控制语句

    跳转语句用于在代码中进行非顺序执行流控制,Java提供了break、continue、label、return等跳转语句。其中,break用于立即退出最内层的循环或switch语句,continue用于跳过当前循环的剩余部分并开始下一次循环迭代,...

    try_catch_finally异常处理java

    即使`try`或`catch`块中存在`return`语句,`finally`块的代码也会被执行。这确保了程序的整洁和资源的有效管理。 在Java中,`try-catch-finally`结构可以单独使用,也可以嵌套使用。嵌套的`try-catch-finally`允许...

    Java软件开发实战 Java基础与案例开发详解 10-5 finally关键字 共7页.pdf

    关于`return`语句的使用,有一个重要的原则:既不在`try`内部使用`return`语句,也不在`finally`内部使用`return`语句,而应该在`finally`语句之后使用`return`来表示函数的结束和返回。 通过以上的详细介绍,我们...

    josonle#Coding-Now#finally语句如何执行1

    - 无论try是否发生异常,finally语句都会执行- 如果try/catch中包含控制转移语句(return、continue、break),finally

Global site tag (gtag.js) - Google Analytics