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
  • 相关阅读:
    window.open打开新窗体并用post方式传参
    开发环境搭建问题及解决
    JavaScript高级程序设计(二)
    JavaScript高级程序设计(一)
    JS 小技巧整理
    Windows7版本了解
    安装mysql8.0.17时候报错1251-Client does not support authentication protocol requested by server; consider upgrading MySQL client
    idea中gradle的springboot的项目热部署
    idea多行注释缩进
    idea的类头注释和方法注释的编辑
  • 原文地址:https://www.cnblogs.com/lemon-now/p/5148131.html
Copyright © 2011-2022 走看看