何时执行Java语言的finally块
来源:互联网 发布:java服务器开发 简历 编辑:程序博客网 时间:2024/06/06 03:51
最近看到一个非常有意思的代码:
public class TestException { public static void main(String[] args) { System.out.println(foo()); } public static int foo() { try { int a = 10/0; if (a > 0) return 4; } catch(ArithmeticException e) { return 45; } finally { return 34; } }}
问:程序的输出是什么?
分析:
程序会抛出ArithmeticException异常,因此会执行到catch块,所以返回45是有可能的,返回4可以排除了;
但是,但是,但是 好像也学到过finally是一定会在异常结束前执行,那么就应该是返回34了。
下面可以做两个简单的实验。
实验一:
public class TestException { public static void main(String[] args) { System.out.println(foo()); } public static int foo() { try { int a = 10/0; if (a > 0) return 4; } catch(Exception e) { System.out.println("execute catch block"); return 45; } finally { System.out.println("execute finally block"); return 34; } }}
输出结果:
execute catch blockexecute finally block34
实验二:
public class TestException { public static void main(String[] args) { System.out.println(foo()); } public static int foo() { try { System.out.println("execute try block, before return"); return 4; } catch(Exception e) { System.out.println("execute catch block"); return 45; } finally { System.out.println("execute finally block"); return 34; } }}
输出结果:
execute try block, before returnexecute finally block34
结论
结果都是返回34,说明finally会在try和catch块结束之前执行,那结束之前又是在什么时候呢?
实验一说明了catch要先于finally块开始执行,但是在catch块执行return语句之前,会执行finally块;
实验二说明了当try的return语句之前时,会先执行finally块。
因此:finally会在try和catch return之前执行,如果try和catch块中没有return语句,那就是在两个块的大括号结束前执行。
阅读全文
0 0
- 何时执行Java语言的finally块
- Java的finally块执行分析
- finally块的执行
- Finally语句块的执行
- java try语句块 finally和return 的执行顺序
- Java中finally块与return之间的执行顺序
- Java中finally语句块的深度解析(try catch finally的执行顺序)
- java的try-catch-finally块中,finally中的代码是否一定会执行?
- java Finally块中代码什么时候执行
- static 块何时执行
- try-catch-finally块的执行流程
- finally块中代码的执行
- try/catch/finally块的执行顺序
- JAVA——finally块中的代码什么时候被执行、执行的效果是什么?
- Java语言中try-catch-finally的执行顺序
- Java语言中try-catch-finally的执行顺序
- Java 中static 块作用及何时执行
- java Finally代码块真的任何情况下都是执行的?
- JAVA 攻城狮 第二十四天
- 浅谈整数,浮点数在内存中的存储
- java中的普通代码块、静态代码块、构造代码块和同步代码块
- numpy 轴与维度的理解
- C++异常
- 何时执行Java语言的finally块
- dfs Preparing Olympiad
- adb常用命令整理
- MySQL高性能表设计规范
- Java源码解析:hashCode与相同对象的关系
- CSS3颜色
- 《互联网信贷风险与大数据》读书笔记(三)
- android-iconify 使用详解
- Ryu application API原文加翻译(一)