首页
学习
活动
专区
圈层
工具
发布

【漫画】finally到底是在return之前执行还是return之后执行?

比如我一些数据的关闭操作啦等,必须要执行的操作一定要放到finally语句,确保会执行。 在某些情况下,try语句压根就没有执行到,那么finally语句也一定就不会执行到了。...还有一种情况就是在try块中有System.exit(0);这样的语句,System.exit(0);是终止Java虚拟机JVM的,连JVM都停止了,所有都结束了,当然finally语句也不会被执行到。...第一段代码中的finally块中,虽然执行了i += 10,但是由于没有return,所以局部变量表中的内容没有变化,所以i还是10; 第二段代码中的finally块中,由于最后return i语句的执行...return返回后,就代表着方法执行结束,相应的该方法的栈帧就出栈了。而这个时候也就意味着,return返回是最后执行的,所以finally语句是在retrun返回之前执行的!...retrun语句执行后,return返回之前执行的,也就是说finally必执行(当然是建立在try执行的基础上) finally中修改的基本类型没有return是不影响返回结果的,有了retrun才会影响

98220

Java finally语句到底是在return之前还是之后执行?

当然还有很多人探讨Finally语句的执行与return的关系,颇为让人迷惑,不知道finally语句是在try的return之前执行还是之后执行?...我也是一头雾水,我觉得他们的说法都不正确,我觉得应该是:finally语句是在try的return语句执行之后,return返回之前执行。...1. finally语句在return语句执行之后return返回之前执行的。...当然只有在异常的情况下才有可能会执行,那么是在finally之前就返回吗?看下面。 5....最后总结:finally块的语句在try或catch中的return语句执行之后返回之前执行且finally里的修改语句不能影响try或catch中return已经确定的返回值,若finally里也有return

1.7K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java finally语句到底是在return之前还是之后执行?

    当然还有很多人探讨Finally语句的执行与return的关系,颇为让人迷惑,不知道finally语句是在try的return之前执行还是之后执行?...我也是一头雾水,我觉得他们的说法都不正确,我觉得应该是:finally语句是在try的return语句执行之后,return返回之前执行。...finally语句在return语句执行之后return返回之前执行的。...当然只有在异常的情况下才有可能会执行,那么是在finally之前就返回吗?看下面。 当发生异常后,catch中的return执行情况与未发生异常时try中return的执行情况完全一样。...最后总结: finally块的语句在try或catch中的return语句执行之后返回之前执行且finally里的修改语句可能影响也可能不影响try或catch中 return已经确定的返回值,若finally

    1.2K20

    Java finally 语句到底是在 return 之前还是之后执行?

    1 finally语句在return语句执行之后return返回之前执行的 2 finally块中的return语句会覆盖try块中的return返回 3 如果finally语句中没有return语句覆盖返回值...try中return的执行情况完全一样 6 最后总结 1 finally语句在return语句执行之后return返回之前执行的 public class FinallyTest1 { public...这就是Java到底是传值还是传址的问题了,简单来说就是:Java中只有传值没有传址,这也是为什么map = null这句不起作用。...当然只有在异常的情况下才有可能会执行,那么是在finally之前就返回吗?看下面。...6 最后总结 finally块的语句在try或catch中的return语句执行之后返回之前执行且finally里的修改语句可能影响也可能不影响try或catch中 return已经确定的返回值,若finally

    1.6K10

    Java finally语句到底是在return之前还是之后执行?

    当然还有很多人探讨Finally语句的执行与return的关系,颇为让人迷惑,不知道finally语句是在try的return之前执行还是之后执行?我也是一头雾水,我觉得他们的说法都不正确。...我觉得应该是:finally语句是在try的return语句执行之后,return返回之前执行。...1. finally语句在return语句执行之后return返回之前执行的。...当然只有在异常的情况下才有可能会执行,那么是在finally之前就返回吗?看下面。 5. 当发生异常后,catch中的return执行情况与未发生异常时try中return的执行情况完全一样。...最后总结 finally块的语句在try或catch中的return语句执行之后返回之前执行且finally里的修改语句可能影响也可能不影响try或catch中 return已经确定的返回值,若finally

    1.1K20

    JAVA CDI 学习(3) - @Produces及@Disposes

    在正式学习这个之前,先来看一个场景: 基于web的db应用开发中,经常要在一个页面上连接db,然后干点啥,最后关闭连接。...我们知道所有jsf/jsp页面,最终运行时,实际上执行的是背后对应的Servlet,整个Servlet的生命周期在加入了这二个注解后,其执行顺序如下: ?...让我们将思维方式,从人类大脑切换成计算机电脑的模式,ConnectionImpl继承自Connection,对于系统来讲,这二个是都是兼容Connection类型的,在产生对象时,这还好说,因为目前Connection...这时传入的参数类型是Connection接口类型,这时它并不知道该对象具体是何种实现?...所以,我们自己创建了一个@MyConnection注解,在@Produces与@Disposes上都应用该注解,这样对象销毁时,就能根据该注解精确的知道是要销毁何种类型的哪个对象. 6、@MyConnection

    1.5K50

    JSF之经常使用注解

    JSF 将把此 bean 放入请求范围。假设没有指定不论什么名称,JSF 将把类名的第一个字母转换为小写,形成一个托管 bean 名称;比如。...凝视必须放在类成员变量的声明之前。 name 属性指定特性的名称,默认情况下为成员变量的名称。value 属性是特性的值。能够是一个字符串。也能够是一个 JSF 表达式,比方 #{...}。...@SessionScoped 在会话范围内存储托管 bean。 @ApplicationScope 在应用程序范围内存储托管 bean。...@PostConstruct 用于资源注入初始化之后 @PreDestory 用于Servlet脱离服务并释放注入的资源的时候 @Resource 位于类或变量中以对Servlet...一个注入的资源能够是数据源,Java信息服务目的文件或者是环境设置的标量。

    85310

    如何写好一个 Spring 组件

    BeanPostProcessor 是一个可以自定义实现回调方法接口,来实现自己的实例化逻辑、依赖解决逻辑等,如果想要在 Spring 完成对象实例化、配置、初始化之后实现自己的业务逻辑,可以通过扩展实现一个或多个...JavaEE5 引入了@PostConstruct 作用于 Servlet 生命周期的注解,实现 Bean 初始化之前的自定义操作。...,我们可以在启动后通过 @PostConstruct 注解的方法执行初始化数据。...但由于 Java 高版本已经移除相关 API ,我们不推荐使用此 注解,可以通过 Spring 相关 Event 回调事件处理 @PostConstruct 注解的方法在项目启动的时候执行这个方法,也可以理解为在...InitializingBean 接口方法会在 容器初始化(getter/setter/构造器)完成 bean 的属性注入后执行。

    57620

    静态代码块、静态变量,构造代码块、实例变量的执行顺序和继承逻辑

    ,且优先于属性初始化之前执行 @PostConstruct是对象的属性都初始化ok了之后才去执行的(注意你new的话,@PostConstruct方法是不会执行的,他是Spring给与的支持哦~)...值得注意的是,此处子类没有显示调用super(),但父类的构造还是执行了的。...打印:1 执行静态方法staticFunction,打印:4 从该结果你应该能知道:static变量可不是100%一定在实例变量之前被赋值(初始化哦~),比如本例的b就在a之后初始化了 原因: 类的生命周期是...因此上面如果我们这样写static final int b=112它哪怕在准备阶段,值就应该是112了 类的初始化阶段:需要做的是执行类构造器(请注意:这里不是指的构造函数)。...默认情况下,子类在使用构造函数初始化时(不管是子类使用有参构造还是无参构造),默认情况下都会调用父类的无参构造函数(相当于调用了super())。

    1.4K50

    【小家java】类中静态代码块、构造代码块、静态变量、成员变量执行顺序和继承逻辑

    不初始化则不会执行static块。 最后,附上两张图,大家可以明显发发现一些端倪,希望对大家能有记忆作用哈: 图一:构造代码块是在初始化对象属性(成员变量)之前执行的 ?...图二:@PostConstruct是对象的属性都初始化ok了才去执行的。 ?...(不管是子类使用有参构造还是无参构造),默认情况下都会调用父类的无参构造函数(相当于默认情况调用了super())。...因此上面如果我们这样写static final int b=112它哪怕在准备阶段,值就应该是112了 类的初始化阶段:需要做的是执行类构造器(请注意:这里不是指的构造函数)。...继续执行类构造器,显然就会执行static语句块了~~~输出1,最后调用静态方法,就输出4了 完美~ 冷知识 可能通过结果看,有点颠覆我们之前的认知。

    1.9K20

    在Java EE7框架中使用MongoDB

    本文在创建一个Web应用程序使用MongoDB的手放在存储。 这种安排是…… 这是一个简单的、精益的CRUD应用程序,或者它的一部分,使用一些EJB和JSF JEE7的中坚分子。...这个外围库是可选的,但在偶然的情况下方便。 注意,可以使用任何IDE和应用服务器,只要是JEE7兼容。 一旦下载/安装,在Netbeans可以创建一个Web应用程序项目如下。...这个类被指定为无状态因为我们不想执行工作由这类跨多个方法调用。同时,无状态bean是轻量级和易于管理。然而,这仅仅是一个表示。其他表示在各种情况下同样是可能的。...注释@PostConstruct确保依赖注入的初始化之前使用的JSF页面。观察候选人名单被填充pre-reposited MongoDB数据库中的数据。...该页面还必须包含一个按钮执行过滤候选人的技能列表和一个删除按钮,分别。下面是该指数。xhtml页面,它需要被添加到项目的web页面 <?

    1.3K60

    UData-解决数据使用的最后一公里

    3.1.2 原生StarRocks + Udata改进 鉴于StarRocks表的优异性能,这里将查询引擎切换回原生的SR,同时将之前的积累的优化经验,在原生SR上进行了实现,包括聚合查询和...FE 侧改造优化- Optimizer Plan 的转换 执行计划优化流程: 图16 FE执行计划优化流程图 目前Udata查询引擎对执行计划进行优化的节点是在原来的Optimizer之后...BE 侧改造优化 针对执行计划进行了改写之后,同样在BE侧创建了对应的Node节点,完成计算下推后的执行逻辑,向下对接外部执行引擎,同时向上对接类似join的聚合节点,最终输出结果数据。...Jsf外表的,同样的其他聚合函数都可以用于该Jsf表查询,上面主要有以下需要进行下说明: 列表达式过滤:( recv_count >= 1000 ) 这种过滤条件用于Scan操作获取到数据之后,在BE节点内运行时进行再次过滤...application/json , 还是 x-www-form-urlencoded ,两种方式body中的写法是不一样的,x-www-form-urlencoded 写法是 key1=value&

    1.6K10

    优化你的Spring Boot应用:预加载的秘密

    首先这个注解是java提供的,为不是Spring提供的 该注解的方法在整个bean的 初始化中的执行顺序是: @PostConstruct 注解的方法在整个 Bean 的初始化过程中的执行顺序如下...可以有多个方法都使用了 @PostConstruct 注解,它们的执行顺序取决于它们在类中的声明顺序。...Bean 初始化完成: 一旦 @PostConstruct 方法执行完毕,Bean 就被认为是初始化完成的,可以正常使用了。此后,Bean 就可以响应应用程序的请求并执行其它业务逻辑。...需要注意的是,@PostConstruct 注解标记的方法只会在 Bean 的初始化阶段执行一次。...如果你有多个 Bean,它们都使用了 @PostConstruct 注解,Spring 会按照它们在各自类中的声明顺序执行这些方法。

    36210

    六种方式实现 springboot 项目 启动预加载

    如下图: 源码分析 读过我的文章的铁粉都应该知道CommandLineRunner是如何执行的,原文:头秃系列,二十三张图带你从源码分析Spring Boot 启动流程~ Spring Boot 加载上下文的入口在...()这个方法中执行,源码如下图: 4、@PostConstruct注解 前三种针对的是容器的初始化完成之后做的一些事情,@PostConstruct这个注解是针对Bean的初始化完成之后做一些事情,比如注册一些监听器...… @PostConstruct注解一般放在Bean的方法上,一旦Bean初始化完成之后,将会调用这个方法,代码如下: @Component @Slf4j public class SimpleExampleBean...5、@Bean注解中指定初始化方法 这种方式和@PostConstruct比较类似,同样是指定一个方法在Bean初始化完成之后调用。...@Bean实例化这个Bean,不过@Bean中的initMethod这个属性需要指定初始化之后需要执行的方法,如下: @Bean(initMethod = "init") public SimpleExampleBean

    89510

    Spring原理

    1.Bean的作用域 1.1 概念 在SpringloC&DI阶段,我们学习了Spring是如何帮助我们管理对象的....通过ApplicationContext或者BeanFactory来获取对象 通过@Autowired,Setter方法或者构造方法等来为应用程序注入所依赖的Bean对象 1.2 Bean的作用域...执行初始化方法 xml定义init-method 使用注解的方式@PostConstruct 执行初始化后置方法(BeanPostProcessor) 使用Bean 销毀Bean...实例化和属性赋值对应构造方法和setter方法的注入,初始化和销毁是用户能自定义扩展的两个阶段, 可以在实例化之后,类加载完成之前进行自定义"事件“处理。...("执行destroy方法..."); } } singleton 作用域的范围是单个 Spring ApplicationContext(IoC 容器),而 application 作用域的范围是整个

    10410
    领券