首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java中try-finally块的执行顺序

本文主要介绍的关于异常处理的时候try-catch-finally块的执行顺序,一般情况下,finally块是会执行,在Java中,try-finally块的执行顺序通常遵循以下规则: try块中的代码首先被执行...如果try块中的代码执行完毕,控制流将转到finally块。无论try块中的代码是否抛出异常,finally块中的代码都将被执行。...finally块中的代码执行完毕后,整个try-finally块结束,控制流将继续到下一个语句或代码块。...finally块,try中的return结果会放在类似一个队列中,之后如果finally中有return语句,则会把finally中的return语句中的结果放入队列中,最终的是队列中的第一个数据,即finally...总结: finally语句在try和catch语句中的return执行后、返回前执行; 若finally语句中没有return,则其执行结果不影响try和catch中已确定的返回值; 若finally语句中有

25950

一文整懂 Java 中静态代码块 初始块 构造方法的执行顺序

一文整懂 Java 中静态代码块 / 初始块 / 构造方法的执行顺序 “ 相信,刷过面试题应该都碰到过很多题,关于类继承后 Java 中静态代码块 / 初始块 / 构造方法的执行顺序问题,每每记一下又忘了...,那么,今天来用不多的时间复习一下” 01.静态代码块 / 初始块 / 构造方法的执行顺序 package erdan.demo; public class Demo { static {...wx_fmt=png] 笔记:初始块(非静态代码块)总是和构造方法是一家子,会一块出现 02.测试继承之后的执行顺序 package erdan.demo; public class ChildrenDemo...类比子类先执行 态代码块只会输出一次,初始块与构造方法是一家子,输出在一块,初始块会在构造前初始化 03.总结 父类比子类先行执行 静态代码块,在类第一次加载的时候,会初始化一次,适合项目中初始化全局参数...,常量等 初始块与构造方法是一家子,但是初始块会在构造函数前执行,初始块适合重载构造函数存在相同代码,可以抽出来使用

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

    【JavaSE专栏60】静态代码块,Java类加载过程中执行的一段代码

    主打方向:Vue、SpringBoot、微信小程序 本文讲解了 Java 中静态代码块概念及语法,并给出了样例代码。静态代码块是 Java 类在加载过程中执行的一段代码。...---- 一、什么是静态代码块 静态代码块是在 Java 类加载过程中执行的一段代码,它用于对类进行初始化操作。 静态代码块在类第一次被加载时执行,并且只会执行一次,它的语法格式如下。...---- 二、为什么要用到静态代码块 在 Java 中,静态代码块的主要作用是在类加载的过程中执行一些特定的初始化操作。下面是使用静态代码块的 4 个常见的场景,请同学们认真学习。...可以看到,在类加载时,静态代码块被执行,并且静态变量也被正确地初始化了,这样我们就可以在其他方法中使用这些已经初始化的静态变量了。...五、静态代码块的执行顺序是怎样的? 答:当一个类被加载时,静态代码块会按照定义的顺序依次执行。如果有多个静态代码块,它们的执行顺序与定义的顺序一致。

    1.6K60

    全面理解java异常机制

    在理想状态下,程序会按照我们预想的步骤一步一步的执行,但是即使你是大牛,你也不可避免出错,所以java为我们提供了异常机制。...throw一般和判断语句if配合的多表示:如果满足条件就结束此函数并向调用者抛出异常,否则就继续执行接下来的代码。...捕获异常,我们使用try{}catch{}关键字,try中代码表示可能出现异常的代码块,catch中的代码块表示捕捉到该异常之后需要进行的后续操作。...try{ //可能出现异常的代码块 }catch{ //捕获异常之后的代码块 }finally{ //肯定要执行的代码块 } 五、异常机制的实现细节       第一个我想说的是try...语句块中有return语句的会阻止catch中的return执行。

    1.2K70

    Java异常体系中的秘密

    相信大家每天都在使用Java异常机制,也相信大家对try-catch-finally执行流程烂熟于胸。...异常屏蔽问题 在try-catch-finally代码块中,如果try块、catch块和finally块均有异常抛出,那么最终只能抛出finally块中的异常,而try块和catch块中的异常将会被屏蔽...当执行finally块中的conn.close()方法时,也会向调用者抛一个异常。此时,由try块抛出的异常将会被覆盖,main方法中仅打印finally块中的异常。...相信上述流程大家都烂熟于胸,但如果try块和catch块中出现了return呢?出现了throw呢?此时执行顺序就会发生变化。...当执行代码a = a / 0;时发生异常,try块中它之后的代码便不再执行,而是直接执行catch中代码; 在catch块中,当在执行return -1前,先会执行finally块; 由于finally

    1K100

    Java异常处理最佳实践

    try 代码块内代码会正常执行,并且资源可以正常关闭。...但是,使用 try 代码块是有原因的,一般调用一个或多个可能抛出异常的方法,而且,你自己也可能会抛出一个异常,这意味着代码可能不会执行到 try 代码块的最后部分。结果就是,你并没有关闭资源。...1.1 使用 finally 代码块 与前面几行 try 代码块不同,finally 代码块总是会被执行。不管 try 代码块成功执行之后还是你在 catch 代码块中处理完异常后都会执行。...大多数的 Java 标准资源都继承了这个接口。当你在 try 子句中打开资源,资源会在 try 代码块执行后或异常处理后自动关闭。...说明:try块中的return语句执行成功后,并不马上返回,而是继续执行finally块中的语句,如果此处存在return语句,则在此直接返回,无情丢弃掉try块中的返回点。

    75350

    Java 中的 `try-catch-finally` 与 `try-with-resource`

    它用于自动关闭实现了 java.lang.AutoCloseable 接口或 java.io.Closeable 的资源,如文件或网络连接,以确保它们正确地关闭,即使在发生异常时也能被关闭。...try块中的代码在执行完毕后,无论是否发生异常,都会自动关闭这些资源。 catch块:catch块用于捕获并处理try块中抛出的异常。...它可以包含一个或多个catch子句,每个子句用于处理特定类型的异常。当在try块中的代码发生异常时,程序会跳转到匹配的catch块中,执行相应的异常处理代码。...即使在try块或catch块中使用了return语句,finally块中的代码也会被执行。...4、关闭资源 在try-with-resources中,无论是否发生异常,资源都会被正确关闭。即使在try块中发生异常,也会执行资源的关闭操作。

    8610

    Java进阶(三)多线程开发关键技术

    同步代码块 synchronized用于修饰代码块时,进入同步代码块需要获得synchronized关键字后面括号内的对象(可以是实例对象也可以是class对象)的内置锁。...此时建议不使用同步方法,而使用同步代码块,只对操作临界资源的代码,也即需要同步的代码加锁。...这样做的好处是,当一个线程在执行同步代码块时,其它线程仍然可以执行该方法内同步代码块以外的部分,充分发挥多线程并发的优势,从而相较于同步整个方法而言提升性能。...释放Java内置锁的唯一方式是synchronized方法或者代码块执行结束。...上述等待方法结束后,方法返回的前提是它能重新获得与该条件对象对应的重入锁。如果无法获得锁,仍然会继续等待。这也是awaitNanos(long nanosTimeout)可能会返回负值的原因。

    916180

    Java进阶(三)多线程开发关键技术

    同步代码块 synchronized用于修饰代码块时,进入同步代码块需要获得synchronized关键字后面括号内的对象(可以是实例对象也可以是class对象)的内置锁。...此时建议不使用同步方法,而使用同步代码块,只对操作临界资源的代码,也即需要同步的代码加锁。...这样做的好处是,当一个线程在执行同步代码块时,其它线程仍然可以执行该方法内同步代码块以外的部分,充分发挥多线程并发的优势,从而相较于同步整个方法而言提升性能。...释放Java内置锁的唯一方式是synchronized方法或者代码块执行结束。...上述等待方法结束后,方法返回的前提是它能重新获得与该条件对象对应的重入锁。如果无法获得锁,仍然会继续等待。这也是awaitNanos(long nanosTimeout)可能会返回负值的原因。

    42140

    【JAVA-Day69】抛出异常的精髓:深度解析 throw、throws 关键字,优雅处理异常问题

    在出现不可预测的错误情况时,通过抛出异常,可以中断当前的执行流程,避免程序进一步执行可能导致更严重问题的代码。 代码清晰度: 通过在代码中明确抛出异常,可以使代码结构更加清晰。...这个异常会被 catch 块捕获,并进行相应的处理。 需要注意的是,抛出异常的位置通常是在某个方法内部,而异常的处理则是通过 try-catch 块来捕获和处理的。...在 main 方法中,调用 divide(10, 0) 时,会触发异常,然后被 catch 块捕获并进行相应的处理。...答案: 使用 throw 关键字:用于在方法内部手动抛出异常,通常在发现特定错误或不满足条件的情况下使用。用于中断当前代码执行流程,将控制权转交给异常处理机制。...使用 throws 关键字声明受检查异常,或者使用 try-catch 块进行捕获和处理。

    20011

    【148期】最最最全面的Java异常面试及解答

    可见,即使 catch 中包含了 return 语句,finally 子句依然会执行。...finally一般作用在try-catch代码块中,在处理异常的时候,通常我们将一定要执行的代码方法finally代码块中,表示不管是否出现异常,该代码块都会执行,一般用来存放一些关闭资源的代码。...try 代码块内代码会正常执行,并且资源可以正常关闭。...但是,使用 try 代码块是有原因的,一般调用一个或多个可能抛出异常的方法,而且,你自己也可能会抛出一个异常,这意味着代码可能不会执行到 try 代码块的最后部分。结果就是,你并没有关闭资源。...1.1 使用 finally 代码块 与前面几行 try 代码块不同,finally 代码块总是会被执行。不管 try 代码块成功执行之后还是你在 catch 代码块中处理完异常后都会执行。

    58320

    【Java ——异常机制详解】

    运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。...,程序将跳到catch语句块,并与catch语句块逐一匹配,找到与之对应的处理程序,其他的catch语句块将不会被执行,而try语句块中,出现异常之后的语句也不会被执行,catch语句块执行完后,执行finally...try 代码块内代码会正常执行,并且资源可以正常关闭。...但是,使用 try 代码块是有原因的,一般调用一个或多个可能抛出异常的方法,而且,你自己也可能会抛出一个异常,这意味着代码可能不会执行到 try 代码块的最后部分。结果就是,你并没有关闭资源。...方法一:使用 finally 代码块与前面几行 try 代码块不同,finally 代码块总是会被执行。不管 try 代码块成功执行之后还是你在 catch 代码块中处理完异常后都会执行。

    24200

    JavaSE(十一)之异常处理详解

    它是一段可能产生异常的代码,并且后面跟着处理这些异常的代码。   因而可知,上述try-catch所描述的即是监控区域,关键词try后的一对大括号将一块可能发生异常的代码包起来,即为监控区域。...若有一个catch语句匹配到了,则执行该catch块中的异常处理代码,就不再尝试匹配别的catch块了。     ...程序在有一个命令行参数条件下执行,由嵌套的try块产生一个被0除的异常,由于内部的catch块不匹配这个异常,它将把异常传给外部的try块,在外部异常被处理。...finally创建的代码块在try/catch块完成之后另一个try/catch出现之前执行。finally块无论有没有异常抛出都会执行。...如果抛出异常,即使没有catch子句匹配,finally也会执行。

    1.3K90

    wait(),notify(),notifyAll()_多线程wait和sleep

    在上面的例子中,我们启动两个线程,都去执行线程等待的操作,从执行结果看到,输出了两条“start wait”,这个可以说明,wait()操作会释放掉当前持有对象的锁,否则第二个线程根本不会进入代码块中执行...为线程是在某些条件下等待的————我们在实际开发中往往会设定一些条件,而使线程进入等待,这个时候你可能直觉就会写一个if语句。...但if语句存在一些微妙的小问题,导致即使条件没被满足,你的线程你也有可能被错误地唤醒。所以如果你不在线程被唤醒后再次使用while循环检查唤醒条件是否被满足,你的程序就有可能会出错。...需要注意的是,在执行notifyAll之前,同样需要获取到对象的锁,即必须在同步方法或者同步代码块中执行,否则会抛出IllegalMonitorStateException异常。...sleep sleep方法的作用是让当前线程暂停指定的时间(毫秒),sleep方法是最简单的方法,在上述的例子中也用到过,比较容易理解。唯一需要注意的是其与wait方法的区别。

    70810

    聊聊java的两种锁同步锁和重入锁

    同步锁是隐式获取和释放的,当线程进入同步代码块时,会自动获取同步锁;当线程退出同步代码块时,会自动释放同步锁。 粒度: 重入锁提供了更细粒度的控制。...在线程1中,我们获取锁并执行一些操作,然后在满足某个条件时,调用await()方法等待条件变量。在线程2中,我们获取锁并执行一些操作,然后设置条件变量并调用signal()方法唤醒线程1。...这样就可以使用条件变量来实现线程之间的通信和协作。需要注意的是,在使用条件变量时,需要先获取锁并在try-finally块中释放锁,以确保在任何情况下都能正确释放锁。...另外,在静态代码块中,我们使用synchronized关键字来锁住类对象MyClass.class,以确保在同一时刻只有一个线程可以执行静态代码块中的代码。...最后 总体来说,重入锁相对于同步锁提供了更多的灵活性和控制能力,但使用起来也更加复杂。在大部分情况下,使用同步锁已经足够满足线程同步的需求。

    27610

    Java异常面试题(2020最新版)

    可见,即使 catch 中包含了 return 语句,finally 子句依然会执行。...finally一般作用在try-catch代码块中,在处理异常的时候,通常我们将一定要执行的代码方法finally代码块中,表示不管是否出现异常,该代码块都会执行,一般用来存放一些关闭资源的代码。...try 代码块内代码会正常执行,并且资源可以正常关闭。...但是,使用 try 代码块是有原因的,一般调用一个或多个可能抛出异常的方法,而且,你自己也可能会抛出一个异常,这意味着代码可能不会执行到 try 代码块的最后部分。结果就是,你并没有关闭资源。 ...1.1 使用 finally 代码块  与前面几行 try 代码块不同,finally 代码块总是会被执行。不管 try 代码块成功执行之后还是你在 catch 代码块中处理完异常后都会执行。

    79530

    异常处理升级版

    (); } }   分析:       1)try-catch是尝试着去捕获这些代码抛的异常,如果try语句块中的代码没有抛出异常,那么try-catch...是没有任何作用的                 2)如果try语句块中的代码抛出了异常,并且抛出的异常还是catch语句要处理的异常或其子类型异常,那么这时就会执行catch语句块中的代码,进行异常出现后的处理...4.3、try-catch语句块虽然能处理完异常后继续让代码往下执行,但是在某些时候也会改变代码的执行流程(默认是从上往下顺序执行) public static void main(String[] args...2)try、catch、finally三个代码块中变量的作用域为代码块内部,分别独立而不能相互访问。如果要在三个块中都可以访问,则需要将变量定义到这些块的外面。       ...3)多个catch块时候,最多只会匹配其中一个异常类且只会执行该catch块代码,而不会再执行其它的catch块,且匹配catch语句的顺序为从上到下,也可能所有的catch都没执行。

    90690

    【面试题精讲】finally 中的代码一定会执行吗?

    ❤️ 在Java编程中,try-catch-finally是一种常见的异常处理机制。finally块用于编写无论是否发生异常都必须执行的代码。...finally块是try-catch-finally异常处理结构的一部分,它用于包含必须在try块或catch块执行之后无论是否发生异常都要执行的代码。...// 处理关闭文件时的异常 } } } 在上面的代码中,finally块用于确保inputStream被关闭,即使在try块中发生了异常。...无限循环或死锁 如果在try块中存在无限循环或死锁,导致程序无法正常退出,那么finally块中的代码也将无法执行。...} 在上述示例中,由于无限循环,程序将无法正常退出,finally块中的代码将永远无法执行。

    14810

    谈谈关于Exception 和 Error 的理解

    可检查异常(checked)在代码中必须显示的进行处理,这是编译期检查的一部分,需要使用try…catch 进行捕获,或者使用try…finally 进行资源回收 不可检查异常(unchecked)是在程序运行时候的异常...ThreadDeath的错误,即使是正常的环境,也是一个错误,也不能够被捕获 Error类之间的继承关系: ?...类似的抛出异常的情况比较多的情况下,会产生很多try…catch的样板代码,非常不利于维护,也会造成代码冗余,有没有好的改进方式呢?...改观:try-with-resources语句 Try-with-resources是java7中一个新的异常处理机制,它能够很容易地关闭在try-catch语句块中使用的资源。...当try语句块运行结束时,FileInputStream 会被自动关闭。这是因为FileInputStream 实现了java中的java.lang.AutoCloseable接口。

    76530
    领券