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
  • 相关阅读:
    [Swift]LeetCode128. 最长连续序列 | Longest Consecutive Sequence
    [Swift]LeetCode126. 单词接龙 II | Word Ladder II
    [Swift]LeetCode127. 单词接龙 | Word Ladder
    [Xcode 实际操作]二、视图与手势-(6)给图像视图添加阴影效果
    [Swift]LeetCode124. 二叉树中的最大路径和 | Binary Tree Maximum Path Sum
    [Xcode 实际操作]二、视图与手势-(5)给图像视图添加圆角效果
    [Swift]LeetCode123. 买卖股票的最佳时机 III | Best Time to Buy and Sell Stock III
    [Swift]LeetCode120. 三角形最小路径和 | Triangle
    [Java]LeetCode117. 填充同一层的兄弟节点 II | Populating Next Right Pointers in Each Node II
    话说美国崛起
  • 原文地址:https://www.cnblogs.com/lemon-now/p/5148131.html
Copyright © 2011-2022 走看看