Java异常捕获(单级、多级)-try、catch、finally以及其执行顺序

Java try-catch 捕获异常真的会影响性能吗? 综上所述,Java try-catch 捕获异常并不会对程序性能造成显著的影响,尤其是在现代的 Java 虚拟机中。在编写代码时,我们应该从程序设计角度出发,正确使用 try-catch 语句,以便提高代码的可读性、可维护性和健壮性。如果我们需要针对性能进行优化,可以采用一些技巧和方法,如减少 try-catch 的嵌套层数、将 try-catch 块放在外层循环中等。 阅读详情

   当需要对发生异常(Exception)的情况进行记录或处理时,需要使用try/catch捕捉异常。

1. 单级捕获

    try 语句块中的staff为null,调用getAge方法时抛出NullPointerException,被catch语句捕捉,执行catch语句块内的打印逻辑。

    @Test
    void nullPointExceptionTest(){
        Staff staff = null;
        try{
            staff.getAge();
        }catch (NullPointerException e){
            e.printStackTrace();
        }
        
    }

执行结果


java.lang.NullPointerException
    at  ...


2. 多级语句块

    有三级catch语句进行异常捕捉,捕获到的条件是try语句块抛出的异常是catch语句中的异常或者其子类,捕捉顺序为由上至下(上级catch的异常不能是下一级catch异常的超类(父类,superclass)),若第一级catch未捕获,则由下一级catch验证捕捉,若异常已被捕捉,则之后的catch语句块就不会再捕捉。

2.1 示例1(第一级catch已捕获异常)

    @Test
    void nullPointExceptionTest(){
        Staff staff = null;
        try{
            staff.getAge();
        }catch (NullPointerException e){
            System.out.println("NullPointerException");
        }catch (RuntimeException e){
            System.out.println("RuntimeException");
        }catch (Exception e){
            System.out.println("Exception");
        }
    }

执行结果


NullPointerException


2.2 示例2 (第一级catch未捕获到异常)

    @Test
    void mutilLevelCatchTest1(){
        ArrayList<Object> list = new ArrayList<>();
        try{
            list.get(7);
        }catch (NullPointerException e){
            System.out.println("NullPointerException");
        }catch (RuntimeException e){
            System.out.println("RuntimeException");
        }catch (Exception e){
            System.out.println("Exception");
        }
    }

执行结果


RuntimeException


3. 若有返回值的函数中,try-catch-finally以及return的执行顺序。

  •   finally语句在return语句(无论是在try语句块还是catch语句块中)之前执行;
  •  在执行finally语句之前,已将方法内的返回值保存起来,finally语句块对该值进行的操作都不会改变该值;
    @Test
    void tryCatchFinallySequenceTest(){
        System.out.println(getStaffName());
    }

    private String getStaffName(){
        Staff staff = new Staff("Jerome", 26);
        try{
            String name = "";
            return staff.getName();
        }catch (Exception e){
            e.printStackTrace();
            return "";
        }finally {
            staff.setName("Chris");
            System.out.println("Finally");
        }
    }



class Staff {
    String name;
    Integer age;
    
    public Staff(){

    }
    public Staff(String name, Integer age){
        this.name = name;
        this.age = age;
    }
    
    ... // getter setter
}

执行结果


Finally
Jerome


 

Java异常获取中try-catch-finally块执行顺序实验探究 最近看面试题,发现这个比较好玩,try-catch-finally块的执行顺序问题。 一般认为,finally最后执行,做收尾工作,无论try块是否捕获异常,最后finally都会工作。但是这样还是比较笼统,如果没有catch,而是将异常抛出,让其他方法处理,那么是先进入其他方法还是先执行finally?如果try块中return了,那么finally还执行不执行?进一步,如果try、final... 阅读详情

相关推荐

【零基础入门哈希签名架构,从Lamport到SPHINCS+】第二集 哈希签名树 Merkle Tree Authentication

在第一集中,我们一直忽略了一个问题。设想一下,假如有一个Hacker(黑客),在截获到Sender发送给Receiver的公钥之后,把这个公钥改成Hacker自己的公钥,然后再发给Receiver,那么Receiver就会误认为这是Sender的公钥。所以我们之前所说放方案,其安全性都需要建立在一个前提下:Receiver需要确认公钥确实是Sender发出的。

m0_50572808的博客 2452

Java异常处理语句的执行顺序

finally 之前虚拟机被终止运行(System.exit(0))的话,finally 中的代码就不会被执行。跳过try中剩下的语句,执行catch语句,然后执行finally语句。此时执行顺序是,先执行try语句然后执行finally语句。不一定,以下情况finally 中的代码不会被执行。跳过try中剩下的语句,然后执行finally。会在return之前执行finally语句。程序所在的线程死亡。

Java开发日常 629

【MATLAB+VScode】VScode调试MATLAB代码的终极指南

本文详细介绍了在VScode中调试MATLAB代码的完整方案。通过配置MATLAB Engine for Python作为桥梁,实现在VScode中设置断点、单步执行、查看变量等交互式调试功能,有效结合了VScode的现代化编辑体验与MATLAB的强大计算内核,显著提升开发效率。

weixin_29161719的博客 412

try-catch-finally | 加上return语句时执行顺序

try:用来捕获异常catch:用于处理try中捕获的异常finally:无论是否捕获或处理异常,finally块中的代码都会被执行。try必须有finally可以无try后面必须+一个或者多个catch | try后面+0个或者1个finally总结:try后面必须跟catch 或者 finally 其中之一try后面可以有0个或者多个catch,只能有0个或者1个finally。若try后面没有catch,则必须有一个finally。

大龄烤红薯的博客 6668

Cadence IC618与Spectre231安装:环境变量与License配置详解

在Linux系统中部署Virtuoso等EDA工具时,环境变量与License管理是决定工具能否顺利启动的核心环节。环境变量决定了系统如何找到工具二进制文件以及工具如何定位自身资源,而License则通过FlexLM授权机制控制工具的使用权限。理解PATH、CDS_ROOT、CDS_LIC_FILE等关键变量的作用,掌握lmgrd服务与lmstat验证方法,能显著减少安装后启动失败的概率。无论是学生初装Cadence IC618与Spectre231,还是实验室工作站需要搭建可用的模拟设计环境,理顺环境变量

weixin_29192365的博客 369

SAP MM新手避坑指南:工厂间调拨用301还是303?手把手教你选对移动类型

本文深入解析SAP MM模块中工厂间调拨的301与303移动类型,帮助新手避开常见陷阱。通过对比一步法(301)和两步法(303+305)的核心差异、适用场景及财务影响,提供清晰的决策框架和实战技巧,确保库存调拨的准确性和效率。

weixin_29223603的博客 346

java 捕获异常还是抛出异常

今天在看hadoop源码时,想想自己最近在做的那个系统,发现很多异常处理的方式不对,还是按照传统的异常处理方式(即:采用返回值来标识程序出现的异常情况)。而hadoop中很多方法的声明是有异常抛出的,而我的系统中的很多方法的声明都没有抛出异常。只是判断了异常情况,并输出了错误提示,但是并没有抛出异常。 org.apache.hadoop.hdfs.protocol包下的Block类的readFi...

M_Jack的博客 4178

【Boost5】Boost变换器的输入电容

节点的电流有3个,一个是来自电源输入的,由于我们把Vin看成理想电源以及线路的电感的存在,它可以近似看作是恒定的电流源Iin,一个是流向输入电容Cin的电流Icin,另外一个节点是电感L电流IL。电容电流波形在整个开关周期内的平均值为0,充电和放电在一个周期中各占1/2,在图中充电部分面积和放电部分面积相等,那么在充电或放电的电荷量Q=I*t,从图中可以看出,在一个周期内电容电流变化量是ΔIL,那在电容在充电1/2T周期中电流的变化量是1/2ΔIL。输入电容上的ESR也会随着电流变化,影响输入电压的变化。

qq_43416206的博客 3348

Java多层的异常捕获

一、多层异常捕获示例1: 运行结果: 原因分析: 此题有两个try-catch异常捕获,第一个throw抛出的错误,被内层catch捕获,故最后一个catch未捕获,不显示;第二个catchArithmeticException,被同名即第二个catch捕获,显示发生ArithmeticException。 二、多层异常捕获示例2: ...

weixin_30323631的博客 399

微信浏览器input[file]拍照点确认后强刷新解决

微信浏览器input强刷新,input h5强刷新,微信浏览器上传图片后刷新,h5表单强刷新,h5调用拍照后返回首页,h5调用拍照后刷新,微信浏览器强制刷新,iOS上微信浏览器input强刷新,iOS上微信浏览器上传图片后强刷新,ios微信浏览器上传图片后页面刷数据,h5在ios浏览器闪频,h5在ios微信打开时强制刷新,ios手机上调用相机后页面刷新,ios手机上调用相机后页面后重置,ios拍照后刷新,ios拍照完页面大刷新

江拥羡橙的博客 1349

【知识分享】IBIS 建模指南 03

本文介绍了差分缓冲器的数据提取方法,重点分析了差分系统与单端系统的核心差异。文章详细阐述了差分接收机和驱动器的结构特点、工作原理及建模方法,指出全差分结构具有优异的电源噪声抑制能力。针对IBIS建模规范,作者提出了三维I-V曲面数据提取技术,并介绍了共模/差模电流分离、片上端接处理以及V-T表生成的解决方案。文章还探讨了差分电容(C_diff)的测量方法和数据简化策略,为复杂差分缓冲器的精确建模提供了系统化的技术路径。

一只豌豆象的博客 1282

Java:简述try-catch-finally异常捕获

Java:简述try-catch-finally异常捕获 在Java中,异常通过try-catch语句捕获。其一般语法形式为: try { // 可能会发生异常的程序代码 } catch (Type1 id1){ // 捕获并处置try抛出的异常类型Type1 } catch (Type2 id2){ //捕获并处置try抛出的异常类型Type2 } 关键词tr...

王小二(海阔天空) 1万+

ESP32-C3入门教程 基础篇⑩——SNTP(Simple Network Time Protocol) 网络时间同步的简单实例

ESP32-C3入门教程 基础篇⑩——SNTP(Simple Network Time Protocol) 网络时间同步的简单实例

1589

Java在异常处理中try、catch、finally的执行顺序

通过学习Java的异常处理,知道它是通过try-catch-finally来实现的,那么就有一个疑问?他们的执行顺序是如何的,接下来我将tong'g

qq_48241564的博客 6103

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

try/catch-finally的执行顺序

题记 try-catch后只要有finally,那么finally就一定会被执行;不管try-catch是否有return,finally仍然会执行,如果finally中有return,则只会返回finally中的return的值。 try/catch-finally的执行顺序可以分为:有return和没有return来讨论 一、无return 1.如果没有捕捉到异常,执行try代码块,而不会执行catch的代码块,最后执行finally代码块。其执行顺序:try-->fin...

HandCream123的博客 6150

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Java 的 try catch finally 执行顺序

Java 的 try catch finally 执行顺序

26857259 2357

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Java中try,catch,finally执行顺序

Java中try,catch,finally代码执行顺序是怎么样的?如果带有return又是怎样的?这是面试常考的一个问题。 先给出结论: 1.如果try中没有异常,则顺序为try→finally;如果try中有异常,顺序为try→catch→finally,并且异常之后的代码不会执行。 2.当try或catch中带有return时,会先执行return前的代码,然后暂时保存需要return的信息,再执行finally中的代码,最后再通过return返回之前保存的信息。 还要注意,如果return的

Humphrey0313 4664

try catch finally 里面有return的执行顺序详细讲解

try catch finally 里面有return的执行顺序 实例测试 第一种情况 try里面有return,catch和finally里面吗没有return public static int tryTest(int i){ try { System.out.println("try里面的语句执行了!"); return i; }catch (Exception e){ e.printStack

qq_46589658的博客 5402

try、catch、finally的执行顺序

1. 不带return的执行顺序 异常处理中,try、catch、finally的执行顺序: 如果try中没有异常,执行顺序为:try->finally 如果try中有异常,执行顺序为:try->catch->finally public class Test { public static int rank; public static void main(String[] args) { rank = 1; solve2(); System.ou

xingyu19911016的博客 1万+

try,catch,finally执行顺序

1、正常执行顺序:try → catch → finally → 其他代码 2、try,catch和finally和其他代码的执行条件: 先执行try。 只要try中有异常,catch就会执行; finally总会执行; 其他代码: 如果finally中没有return:其他代码会执行; 如果finally中有return:其他代码不会执行; 注意:finally中的语句会在return之前执行,...

weixin_45100050的博客 1677

JAVA Try Catch Finally 代码执行顺序

public void test () { //1 throw new RuntimeException(); //2 } 基本知识 如果有错误,不进行try-catch则会编译报错。 public void test () { try { // 1 throw new NullPointerException(); //2 } catch (Run...

不是很懂 1万+

【try-catch-finally】java异常捕获的三种格式以及finally和return的执行顺序

java三种异常捕获形式,try-catch-finally执行流程,以及finally和return的注意事项

大三java学习 1650

catch抛出异常finally还执行吗_教你一招搞定try,catch,finally的执行顺序

在面试的时候,经常会问到一些很基础的知识,比如有没接触过try,catch,finally?他们的执行顺序是怎么样的呢?你对此嗤之以鼻,这不是很简单吗?按照顺序执就行了。没错,可是如果每一块有return,并且有抛异常,扑捉异常的情况呢?估计很多 人都答不上来。下面我列出try,catch,finally的各种情况,然后总结一招搞定try,catch,finally的执行顺序。举例:情况1: tr...

weixin_35998791的博客 3484

java中的try catch finally return的执行顺序问题总结

在java中我们经常会遇到关于捕获异常的处理,下面总结了所有的关于try  catch finally return的执行顺序的问题的例子。 1.在finally后面不跟ruturn语句 1.1  在这种形式下try{  return; }catch{}finally{},如果try中没有异常就执行finally中的语句,如果有异常就执行catch和finally中的语句    有异常:

12的博客 4656

Java try、catch、finally执行顺序

Java中,try块,catch块,finally块的常见执行顺序分为有异常和无异常。无异常:try->finally;有异常:try->catch->finally。根据这两种情况,跑一遍无返回值和有返回值的具体执行变化 创建一个测试类,编写异常捕获的测试函数 在项目pom文件中添加测试类依赖 <dependency> <groupId>org.springframework.boot</groupId> <ar

weixin_43914164的博客 2637

Java异常机制之try catch finally return执行顺序

Java异常机制之try catch finally return执行顺序Backdround什么时候不执行finallyfinal执行的终极原则没有异常finally也要跑return或throw前finally执行返回值与finally的不解之谜finally里没有return时finally里有return时 Backdround 实验室的大师姐突然问窝很详细的Java异常代码块的执行顺序,...

见不着太阳的蘑菇的博客 958
上一篇: Java异常体系-Throwable、Error、Exception
下一篇: 面向对象编程的四个基本特性(抽象、封装、继承及多态)以及示例
小鸡炖蘑菇Plus版
博客等级 码龄10年 10粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值