zoukankan      html  css  js  c++  java
  • Java关键字finally

    参考文章:关于Java中finally语句块的深度辨析 

    仅考虑程序正常执行的情况下,不考虑System.exit(0)等情况。不过关于“finally 语句块一定会执行吗?”这个问题确实会有一定的说法。

    1,无控制转移语句,在return之前执行

    (1)
    try {
        System.out.println("try...");
        return;
    } catch (Exception e) {
        System.out.println("catch...");  
    } finally {
        System.out.println("finally...");
    }
    output:会在try代码块return之前执行
    try...
    finally...
    (2)
    try {
        System.out.println("try...");
        throw new Exception(" ");
    } catch (Exception e) {
        System.out.println("catch...");
        return;
    } finally {
        System.out.println("finally...");
    }
    output:会在catch代码块return之前执行
    try...
    catch...
    finally...

     2,finally中有return 

    (1)
    public class Demo{
        public static void main(String[] args) {
            System.out.println("result = " + test(10));
        }
        
        public static int test(int i) {
            try {
                System.out.println("try...");
                return i-1;
            } catch (Exception e) {
                System.out.println("catch...");
                return i-2;
            } finally {
                System.out.println("finally...");
                return i-4;
            }
        }
    }
    output:return的是6,finally中的结果
    try...
    finally...
    result = 6
    (2)
    public class Demo{
        public static void main(String[] args) {
            System.out.println("result = " + test(10));
        }
        
        public static int test(int i) {
            try {
                System.out.println("try...");
                throw new Exception();
            } catch (Exception e) {
                System.out.println("catch...");
                return i-2;
            } finally {
                System.out.println("finally...");
                return i-4;
            }
        }
    }
    output:return的是6,finally中的结果
    try...
    catch...
    finally...
    result = 6
    (3)finally中有无return,但是有运算
    import java.util.HashMap;
    import java.util.Map;
    
    public class Demo{
        public static void main(String[] args) {
            System.out.println("result = " + test(10));
        }
        
        public static int test(int i) {
            Map<String, Object> map = new HashMap<String, Object>();
            map.put("Demo", "Demo");        
            try {
                System.out.println("try...");
                return i-1;
            } catch (Exception e) {
                System.out.println("catch...");
                return i-2;
            } finally {
                System.out.println("finally...");
                i = i-4;
            }
        }
    }
    output:return的是9,而不是10-4-1=5
    try...
    finally...
    result = 9
    (4)在finally中return
    import java.util.HashMap;
    import java.util.Map;
    
    public class Demo{
        public static void main(String[] args) {
            System.out.println("result = " + test(10));
        }
        
        public static int test(int i) {
            try {
                System.out.println("try...");
                return i-1;
            } catch (Exception e) {
                System.out.println("catch...");
                return i-2;
            } finally {
                System.out.println("finally...");
                return i-4;
            }
        }
    }
    output:与(1)(2)类似,直接return了
    try...
    finally...
    result = 6
    (5)在代码块外面return
    public class Demo{
        public static void main(String[] args) {
            System.out.println("result = " + test(10));
        }
        
        public static int test(int i) {
            try {
                System.out.println("try...");
                i--;
            } catch (Exception e) {
                System.out.println("catch...");
                return i-2;
            } finally {
                System.out.println("finally...");
                i = i - 4;
            }
            return i;
        }
    }
    output:
    try...
    finally...
    result = 5
  • 相关阅读:
    【案例】ORA-02298
    ORA-01578: ORACLE 数据块损坏 (文件号 10, 块号 57896)ORA-01110: 数据文件 10: '/data/oradata/prod35.dbf'
    mysql主从架构,IO、SQL线程运行为YES,从库没有同步数据
    MySQL5.7.21报错:[Err] 1055
    ORACLE数据库黑/白名单
    Mongodb日常管理
    hive Hbase sql
    hive DDL操作
    hive 分桶及抽样调查
    hive 排序
  • 原文地址:https://www.cnblogs.com/lemon-now/p/5148131.html
Copyright © 2011-2022 走看看