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;

    啰嗦了!

  • 相关阅读:
    有上下界的可行流
    NOIP模拟——change
    NOIP模拟 ———number(假的数位dp)
    18.8.18NOIP模拟。。。。Snow
    字符串算法(KMP,Trie树,AC自动机)
    BZOJ4293 Siano
    NOIP2017 DAY2 T1
    AtCoder Grand Contest 023 D GO Home
    浅谈SPFA(队列优化的Bellman-Ford算法)
    最短路最基本算法———Floyd算法
  • 原文地址:https://www.cnblogs.com/xh_Blog/p/6518620.html
Copyright © 2011-2022 走看看