• 2020年9月4日 try catch finally遇见return的时候返回值是啥?(面试题)


    package com.atguigu.test04;
    
    /*
     * finally与return混用:
     * 
     * (1)不管try中是否发生异常,也不管catch是否可以捕获异常,也无论try或catch中是否有return。
     *     finally中的代码都必须执行
     * (2)如果finally中有return就从finally块的的return回去 */
    public class TestFinallyReturn {
        public static void main(String[] args) {
            String str = getNum(1);
            System.out.println(str);
        }
        
        public static String getNum(int a){
            try{
                System.out.println(a/0);
                if(a > 0){
                    return "正数";
                }else if(a < 0){
                    return "负数";
                }else{
                    return "零";
                }
            }catch(Exception e){
                return "异常";
            }finally{
                return "最终";
            }
        }
    }
    //运行结果:
    最终
    package com.atguigu.test04;
    
    /*
     * finally与return混用:
     * 
     * (1)不管try中是否发生异常,也不管catch是否可以捕获异常,也无论try或catch中是否有return。
     *     finally中的代码都必须执行
     * (2)如果finally中有return,就从finally块的的return回去。
     * 3)如果finally中没有return,那么先把try或catch中该执行的执行完,
     * 在return结束当前方法之前,先走一下finally,然后回去结束当前方法
     */
    public class TestFinallyNoReturn {
        public static void main(String[] args) {
            String str = getNum(1);
            System.out.println(str);
        }
        
        public static String getNum(int a){
            try{
                System.out.println(a/0);
                if(a > 0){
                    return "正数";
                }else if(a < 0){
                    return "负数";
                }else{
                    return "零";
                }
            }catch(Exception e){
                System.out.println("exception");//①try、catch中该执行的执行完
                return "异常";//③最后return
            }finally{
                System.out.println("finally");//②除了try、catch中该执行的执行完后,先执行finally
            }
        }
    }
    //运行结果:
    exception
    finally
    异常
     
    package com.atguigu.test04;
    /*
     * finally与return混用:
     * 
     * (1)不管try中是否发生异常,也不管catch是否可以捕获异常,也无论try或catch中是否有return。
     *     finally中的代码都必须执行
     * (2)如果finally中有return,就从finally块的的return回去。
     * (3)如果finally中没有return,那么先把try或catch中该执行的执行完(包括把返回值的结果放到要带回调用处的操作数栈的位置)
     * 在return结束当前方法之前,先走一下finally,然后回去结束当前方法.
     * 结论,如果finally中没有return,finally中的代码不影响返回值。
     */
    public class TestFinallyNoReturn2 {
        public static void main(String[] args) {
            int num = getNum(4);
            System.out.println(num);//0
        }
        
        public static int getNum(int a){
            int result = 10;
            try{
                System.out.println(a/0);
                if(a > 0){
                    result = 20;
                    return result;
                }else if(a < 0){
                    result = -20;
                    return result;
                }else{
                    return result;
                }
            }catch(Exception e){
                System.out.println("exception");
                result = 0;
                return result;
            }finally{
                result = 30;
                System.out.println("finally");
    //            return result;//如果有这句,结果就变成30
            }
        }
    }

    运行结果:
    exception//该执行的执行完

    finally//除了try、catch之外先执行finally
    0//返回值的结果0,(包括把返回值的结果放到要带回调用处的操作数栈的位置
     
  • 相关阅读:
    不值钱的软件人才[转]
    java--uploadify3.1多文件上传
    在IT行业获得成功 你只需一项技能[转]
    com.javax.servlet 慢慢看完慢慢学完
    java.sql.SQLException: The SQL statement must not be null or empty.这个错误
    我在Fackbook的这三年[转]
    Struts2体系介绍
    做正确的事情 等着被开除 [转]
    用js如何获取file是否存在
    struts2整合uploadify插件怎样传参数
  • 原文地址:https://www.cnblogs.com/douyunpeng/p/13614846.html
Copyright © 2020-2023  润新知