zoukankan      html  css  js  c++  java
  • 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,(包括把返回值的结果放到要带回调用处的操作数栈的位置
     
  • 相关阅读:
    盘点 2011 年五款开源的 iPhone/Android 游戏
    你值得安装的 7 个很酷的 CyanogenMod 7 主题
    当 iOS 游戏开发像做份沙拉那么简单
    Mono for Android 4.0, 用 C# 开发 Android 应用
    Windows 8 Beta 应用大赛启动 现已可以上传作品
    10 个实验性的 JS/CSS3 编程技术
    关于Android图形系统的一些事实真相
    Mac 平台上给开发者/设计者的17个有用的 App
    惠普宣布保留webOS转型为开放源代码社区
    Windows 8来者不善,准备接招
  • 原文地址:https://www.cnblogs.com/douyunpeng/p/13614846.html
Copyright © 2011-2022 走看看