zoukankan      html  css  js  c++  java
  • try {}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会不会被执行,什么时候被执行,在 return 前还是后?

    会在return中间执行!

    try 中的 return 语句调用的函数先于 finally 中调用的函数执行,也就是说 return 语句先执行,finally 语句后执行, return 并不是让函数马上返回,而是 return 语句执行后,将把返回结果放置进函数栈中,此时函数并不是马上返回,它要执行 finally 语句后才真正开始返回!但此时会出现两种情况:

    ①、如果finally中也有return,则会直接返回并终止程序,函数栈中的return不会被完成!;

    ②、如果finally中没有return,则在执行完finally中的代码之后,会将函数栈中的try中的return的内容返回并终止程序;

    catch同try;

     

    package com.test;
    
    public class Test1 {
        public static void main(String[] args) {
            try {
                System.out.println(new Test1().testname());
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
        public String testname() throws Exception {
            String t = "";
    
            try {
                t = "try";
                System.out.println("try");
                return t;
            } catch (Exception e) {
                // result = "catch";
                t = "catch";
                return t;
            } finally {
    
                System.out.println("finally");
                // return t = "finally";
            }
        }
    }
    打印结果如下:
    try
    finally
    try

    将finally中的注释放开,打印结果如下:

    try
    finally
    finally

    结论:finally中的代码肯定会执行,但是会先执行try中的代码,如果try中有return,那么return的东西会先放到函数栈中,然后再执行finally中的代码,

    ①、如果finally中也有return,则会直接返回并终止程序,函数栈中的return不会被完成!;

    ②、如果finally中没有return,则在执行完finally中的代码之后,会将函数栈中的try中的return的内容返回并终止程序;

    catch同try;

    啰嗦了!

  • 相关阅读:
    Maven关于web.xml中Servlet和Servlet映射的问题
    intellij idea的Maven项目运行报程序包找不到的错误
    修改Maven项目默认JDK版本
    刷题15. 3Sum
    刷题11. Container With Most Water
    刷题10. Regular Expression Matching
    刷题5. Longest Palindromic Substring
    刷题4. Median of Two Sorted Arrays
    刷题3. Longest Substring Without Repeating Characters
    刷题2. Add Two Numbers
  • 原文地址:https://www.cnblogs.com/xh_Blog/p/6518620.html
Copyright © 2011-2022 走看看