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,(包括把返回值的结果放到要带回调用处的操作数栈的位置
     
  • 相关阅读:
    Binary Tree Inorder Traversal
    Populating Next Right Pointers in Each Node
    Minimum Depth of Binary Tree
    Majority Element
    Excel Sheet Column Number
    Reverse Bits
    Happy Number
    House Robber
    Remove Linked List Elements
    Contains Duplicate
  • 原文地址:https://www.cnblogs.com/douyunpeng/p/13614846.html
Copyright © 2011-2022 走看看