try catch finally的执行顺序深入分析_java

首先执行try,如果有异常执行catch,无论如何都会执行finally

一个函数中肯定会执行finally中的部分。

关于一个函数的执行过程是,当有return以后,函数就会把这个数据存储在某个位置,然后告诉主函数,我不执行了,接下来你执行吧,所以函数就会推出。

但是当一个函数中出现finally以后,finally永远都要执行,所以,就算try或者catch中已经执行了return了,但是这时函数不会退出,不会告诉主函数去执行,而是等待finally执行完了才回去告诉主函数去执行,这时候如果finally中出现了return的话,这次return的值就会覆盖掉try或者catch中的值,然后才会告诉主函数:我不执行了,你去执行吧。所以主函数会得到finally中的返回值。也就是说子函数的返回值永远是finally中的返回值(只要被调用的函数中有值)

时间: 2024-08-03 07:53:05

try catch finally的执行顺序深入分析_java的相关文章

有return的情况下try catch finally的执行顺序

背景:          昨天一个朋友出去面试,遇到这么一道题:"C#  catch里有return,finally里还执行吗?" 个人实践小结:         1.不管有木有出现异常,finally块中代码都会执行.         2.当try和catch中有return时,finally仍然会执行.     具体案例如下(此处以没有返回值的函数进行验证):                 3.如果是值传递,finally中改变的值对try或catch块中return返回的值无影

try/catch/finally执行顺序

问题描述 public int getNumber() {int a = 0;try {String s = "t"; ------------------------(1)a = Integer.parseInt(s);-----------(2)return a;} catch (NumberFormatException e) {a = 1;-----------------------------------(3)return a;-----------------------

举例说明Java中代码块的执行顺序_java

前言    今天在看Android ContentProvider实现的时候,突然想到了Java类在new的过程中,静态域.静态块.非静态域.非静态块.构造函数的执行顺序问题.其实这是一个很经典的问题,非常考察对Java基础知识的掌握程度.很多面试过程中相信也有这样的问题,趁着周末有时间复习一下. 结论    这里先把整理好的结论抛给大家,然后我在写个程序来验证我们的结论.在Java类被new的过程中,执行顺序如下:     实现自身的静态属性和静态代码块.(根据代码出现的顺序决定谁先执行)  

java中子类继承父类,程序运行顺序的深入分析_java

我们经常在项目中使用继承,但是往往不太明白,程序运行的顺序以及原理,尤其是使用上转型对象的时候,以及父类子类中都有static变量和方法时,不知道先运行谁.我也是写了一个例子.总结了一下. 复制代码 代码如下: 父类:public class TestStatic {     public static String name="china";     {       System.out.println("========方法体========");    }  

Enterprise Library Policy Injection Application Block 之四:如何控制CallHandler的执行顺序

一.为什么CallHandler需要进行排序 PIAB为我们提供了一个很好地实现AOP的方式.AOP旨在实现Business Logic和Non-Business Infrastructure Logic的分离.通过PIAB,我们将这些业务无关的逻辑定义在一个个的CallHandler中,然后通过Attribute或者Configuration的方式,将我们所需的CallHandler运用到相应的目标对象中.从这个意义上讲,PIAB具有很好的Flexibility和Extensibility.但

hibernate-Hibernate 语句执行顺序问题

问题描述 Hibernate 语句执行顺序问题 代码: private static void editInfo() { Session session = null; try { session = HibernateUtil.getSession(); if (session != null) { session.beginTransaction(); Person p = new Person("王三", 22, "男", "北京"); s

探析浏览器执行JavaScript脚本加载与代码执行顺序_javascript技巧

本文主要基于向HTML页面引入JavaScript的几种方式,分析HTML中JavaScript脚本的执行顺序问题 1. 关于JavaScript脚本执行的阻塞性 JavaScript在浏览器中被解析和执行时具有阻塞的特性,也就是说,当JavaScript代码执行时,页面的解析.渲染以及其他资源的下载都要停下来等待脚本执行完毕①.这一点是没有争议的,并且在所有浏览器中的行为都是一致的,原因也不难理解:浏览器需要一个稳定的DOM结构,而JavaScript可能会修改DOM(改变DOM结构或修改某个

T-sql语句查询执行顺序

原文:T-sql语句查询执行顺序 前言 数据库的查询执行,毋庸置疑是程序员必备技能之一,然而数据库查询执行的过程绚烂多彩,却是很少被人了解,今天哥哥要带你装逼带你飞,深入一下这sql查询的来龙去脉,为查询的性能优化处理打个基础,或许面试你也会遇到,预防不跪还是看看吧. 这篇博客,摒弃查询优化性能,作为其基础,只针对查询流程讲解剖析. 本片博客阐述的过程为 1.上一个标识过的sql语句,展示查询执行的流程 2.上一个流程图 3.做一个例子逐步深入分析,帮助理解 4.做一个装逼的总结 sql查询语句

Java执行JavaScript代码_java

我们要在Java中执行JavaScriptMethods.js中的execute(s1,s2)方法,JavaScriptMethods.js文件内容如下: function execute(s1, s2){ return s1 + s2; } 首先需要定义一个接口,这个接口中给出与要执行的JavaScript方法一样的方法签名,我们定义接口Methods,它的内容如下: /** * 接口中的方法签名必须与要执行的JavaScript方法一致 * @author yuncong * */ publ