try-catch-finally 捕获异常不在catch里抛出;循环遍历对象生成任务,捕获异常对象不抛出,不影响其他正常对象生成任务

news2025/2/23 7:37:50

场景:一个模板绑定多个对象,要对每个对象生成任务。捕获生成任务过程中的异常,但是不抛出,只是用日志记录。这样做目的:循环遍历对象生成任务时,异常对象数据生成任务时发生异常只是导致自己生成任务失败,但不会影响到其他正常对象数据生成任务。例如对象1数据异常,那就捕获对象1的异常信息但不抛出(一旦抛出就会导致后面的对象生成任务失败),只是对象1生成不了任务。对象2,对象3是正常的,还是可以正常生成任务。

一、举例

//1、try-catch 直接捕获异常不在catch里抛出,会执行try-catch之外的代码
public class NullPointerExample {
    public static void main(String[] args) {
        String str = null;

        try {
            // 尝试执行可能抛出空指针异常的代码
            System.out.println(str.length()); // 这里会抛出NullPointerException
            createTask();//不会执行生成任务的代码
        } catch (Exception e) {
            // 捕获到空指针异常后,在这里处理异常
            System.out.println("捕获到空指针异常: " + e.getMessage());
        }
        // try-catch之外的代码
        System.out.println("在catch里异常没有被抛出,程序能继续执行...");
    }
}

在这里插入图片描述

//2、try-catch直接捕获异常在catch里抛出,不会执行try-catch之外的代码
public class NullPointerExample {
    public static void main(String[] args) {
        String str = null;

        try {
            // 尝试执行可能抛出空指针异常的代码
            System.out.println(str.length()); // 这里会抛出NullPointerException
            createTask();//不会执行生成任务的代码
        } catch (Exception e) {
            // 捕获到空指针异常后,在这里处理异常
            System.out.println("捕获到空指针异常: " + e.getMessage());
            throw e; //这里直接抛出异常,那么try-catch之外的代码就不能执行了
        }
        // try-catch之外的代码
        System.out.println("在catch里异常被抛出,程序不能继续执行...");
    }
}

在这里插入图片描述

//3、在catch里异常被抛出,finally里的代码能执行,try-catch-finally之外的后续代码不能执行
public class NullPointerExample {
    public static void main(String[] args) {
        String str = null;

        try {
            // 尝试执行可能抛出空指针异常的代码
            System.out.println(str.length()); // 这里会抛出NullPointerException
            createTask();//不会执行生成任务的代码
        } catch (Exception e) {
            // 捕获到空指针异常后,在这里处理异常
            System.out.println("捕获到空指针异常: " + e.getMessage());
            throw e; //这里直接抛出异常,那么try-catch-finally之外的后续代码不能执行
        } finally {
            System.out.println("在catch里异常被抛出,finally里的代码能执行,try-catch-finally之外的后续代码不能执行...");
        }
        // try-catch-finally之外的后续代码
        System.out.println("在catch里异常被抛出,程序不能继续执行...");
    }
}

在这里插入图片描述

//4.在catch里异常不被抛出,finally里的代码能执行,try-catch-finally之外的后续代码能执行
public class NullPointerExample {
    public static void main(String[] args) {
        String str = null;

        try {
            // 尝试执行可能抛出空指针异常的代码
            System.out.println(str.length()); // 这里会抛出NullPointerException
            createTask();//不会执行生成任务的代码
        } catch (Exception e) {
            // 捕获到空指针异常后,在这里处理异常
            System.out.println("捕获到空指针异常: " + e.getMessage());
        } finally {
            System.out.println("在catch里异常不被抛出,finally里的代码能执行,try-catch-finally之外的后续代码能执行...");
        }
        // try-catch-finally之外的后续代码
        System.out.println("在catch里异常不被抛出,程序能继续执行...");
    }
}

在这里插入图片描述

二.、总结

1、无论catch里的异常有没有被抛出,finally里的代码都能执行;
2、catch里的异常被抛出,try-catch之外或者try-catch-finally之外的代码都不能执行;
3、catch里的异常不被抛出,try-catch之外或者try-catch-finally之外的代码都能执行,例如循环遍历对象生成任务,异常对象捕获但不抛出异常,那该异常对象就不会生成任务,但是不影响其他正常对象生成任务;
4、try-catch 之间的代码:发生异常就会被捕获,发生异常地方处后面的代码不会被执行,
( 例如: System.out.println(str.length()); //发生异常,后面的 createTask(); 就不会执行生成任务的代码)。

三、循环遍历对象捕获异常举例

//循环遍历对象 举例1:捕获异常没有抛出,person3数据异常,只会导致person3 在try-catch之间的代码不能执行,person1和person2还是能执行try-catch之间的代码;三个都能执行try-catch之外或者try-catch-finally之外的代码。
public class NullPointerExample {
    public static void main(String[] args) {
        Person person1 = new Person();
        Person person2 = new Person();
        Person person3 = new Person();
        person1.setId(1);
        person1.setName("小米");
        person2.setId(2);
        person2.setName(null);
        person3.setId(3);
        person3.setName("小飞");
        List<Person> people = new ArrayList<>();
        people.add(person1);
        people.add(person2);
        people.add(person3);
       for (Person person : people){
        try {
            // 尝试执行可能抛出空指针异常的代码
            System.out.println("person的姓名长度是:"+person.getName().length()); // 这里会抛出NullPointerException
            System.out.println("try-catch之间的代码执行结果:person的id是"+person.getId()+";"+"person的名称是"+person.getName());  //捕获异常后不会执行到这一步
        } catch (Exception e) {
            // 捕获到空指针异常后,在这里处理异常
            System.out.println("捕获到空指针异常: " + e.getMessage());
        } finally {
            System.out.println("在catch里异常不被抛出,finally里的代码能执行,try-catch-finally之外的后续代码能执行...");
        }
        // try-catch-finally之外的后续代码
        System.out.println("try-catch或try-catch-finally之外的后续代码:" + person);
        System.out.println("---------------------------");
       }
    }
}

在这里插入图片描述

//循环遍历对象 举例2: 捕获异常直接抛出,person2数据异常,导致person2和后面的person3都不能正常执行try-catch之间的代码、try-catch或try-catch-finally之外的后续代码。
public class NullPointerExample {
    public static void main(String[] args) {
        Person person1 = new Person();
        Person person2 = new Person();
        Person person3 = new Person();
        person1.setId(1);
        person1.setName("小米");
        person2.setId(2);
        person2.setName(null);
        person3.setId(3);
        person3.setName("小飞");
        List<Person> people = new ArrayList<>();
        people.add(person1);
        people.add(person2);
        people.add(person3);
       for (Person person : people){
        try {
            // 尝试执行可能抛出空指针异常的代码
            System.out.println("person的姓名长度是:"+person.getName().length()); // 这里会抛出NullPointerException
            System.out.println("try-catch之间的代码执行结果:person的id是"+person.getId()+";"+"person的名称是"+person.getName());  //捕获异常后不会执行到这一步
        } catch (Exception e) {
            // 捕获到空指针异常后,在这里处理异常
            System.out.println("捕获到空指针异常: " + e.getMessage());
            throw e;
        } finally {
            System.out.println("在catch里异常被抛出,finally里的代码能执行,try-catch-finally之外的后续代码不能执行...");
        }
        // try-catch-finally之外的后续代码
        System.out.println("try-catch或try-catch-finally之外的后续代码:" + person);
        System.out.println("---------------------------");
       }
    }
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1954518.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

29 列表元素访问

创建列表之后&#xff0c;可以使用整数作为下标来访问其中的元素&#xff1b;列表还支持使用负整数作为下标。 x list(hello world) print(x) print(x[0]) # 下标为0的元素&#xff0c;第一个元素 print(x[-1]) # 下标为-1的元素&#xff0c;最后一个元素x[5] print(x)

RedHat9 | Ansible 角色

环境版本说明 RedHat9 [Red Hat Enterprise Linux release 9.0]Ansible [core 2.13.3]Python [3.9.10]jinja [3.1.2] 描述角色结构 Playbook可能比较冗长且负载&#xff0c;也可能存在大量的重复代码。而角色&#xff08;roles&#xff09;可以用于层次性结构化的组织playbo…

【python】python生活管理费系统(源码+论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

Python爬虫入门01:在Chrome浏览器轻松抓包

文章目录 爬虫基本概念爬虫定义爬虫工作原理爬虫流程爬虫类型爬虫面临的挑战 使用Chrome浏览器抓包查看网页HTML代码查看HTTP请求请求头&#xff08;Request Header&#xff09;服务器响应抓包的意义 爬虫基本概念 爬虫定义 爬虫&#xff08;Web Crawler 或 Spider&#xff0…

【JavaEE初阶】线程安全(重点)

目录 &#x1f4d5; 线程安全的概念 &#x1f384; 观察线程不安全 &#x1f333; 线程不安全的原因 &#x1f6a9; 原因&#xff1a; &#x1f332;解决之前的线程不安全问题 &#x1f6a9; synchronized 关键字 &#x1f4d5; 线程安全的概念 如果多线程环境下…

前端面经1

1、js是单线程还是多线程&#xff1f; 单线程执行。一次只能执行一个任务&#xff0c;处理任务的方式是通过一个任务队列&#xff08;也称为消息队列&#xff09;来实现的。如果某个操作&#xff08;如网络请求或定时器&#xff09;需要花费较长时间才能完成&#xff0c;它不会…

Flink SQL 的工作机制

前言 Flink SQL 引擎的工作流总结如图所示。 从图中可以看出&#xff0c;一段查询 SQL / 使用TableAPI 编写的程序&#xff08;以下简称 TableAPI 代码&#xff09;从输入到编译为可执行的 JobGraph 主要经历如下几个阶段&#xff1a; 将 SQL文本 / TableAPI 代码转化为逻辑执…

如何保证前后端交互信息不被篡改。

先说说前后端有哪些认证方式来保证&#xff1a; 基于 session 的认证方式&#xff1a;前端在用户登录成功后&#xff0c;后端会在服务器端生成一个唯一的 session ID&#xff0c;并将该 session ID 返回给前端&#xff0c;在后续的请求中&#xff0c;前端需要带上该 session ID…

【漏洞复现】蓝凌OA——远程命令执行

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现 漏洞描述 蓝凌OA平台&#xff0c;数字化向纵深发展&#xff0c;正加速构建产业互联…

图解分布式事务中的2PC与Seata方案

文章目录 文章导图什么是2PC解决传统2PC方案XA方案DTP模型举例&#xff1a;新用户注册送积分总结&#xff1a; Seata方案设计思想执行流程举例&#xff1a;新用户注册送积分 Seata实现2PC事务&#xff08;AT模式&#xff09;前提整体机制写隔离读隔离实际案例理解要点说明核心代…

自动驾驶-机器人-slam-定位面经和面试知识系列06之C++STL面试题(02)

这个博客系列会分为C STL-面经、常考公式推导和SLAM面经面试题等三个系列进行更新&#xff0c;基本涵盖了自己秋招历程被问过的面试内容&#xff08;除了实习和学校项目相关的具体细节&#xff09;。在知乎和牛客&#xff08;某些文章上会附上内推码&#xff09;也会同步更新&a…

锅总详解开源组织之ASF

ASF是什么&#xff1f;ASF孵化的顶级项目有哪些&#xff1f;ASF顶级项目商用化有哪些&#xff1f;涉及的版权是什么&#xff1f;应用案例有哪些&#xff1f;衍生项目及其关联是什么&#xff1f;希望本文能帮您解答这些疑惑&#xff01; 一、ASF简介 Apache Software Foundati…

Java从入门到精通 (十一) ~ 操作系统、进程和线程

无论做什么&#xff0c;请记住都是为你自己而做&#xff0c;这样就毫无怨言&#xff01;今天&#xff0c;我为自己而活&#xff01;今天&#xff0c;又是美丽的一天&#xff01;早安&#xff0c;朋友&#xff01; 目录 前言 一、操作系统 1. 概念 2. 操作系统的基本功能 3…

Mindspore框架循环神经网络RNN模型实现情感分类|(五)模型训练

Mindspore框架循环神经网络RNN模型实现情感分类 Mindspore框架循环神经网络RNN模型实现情感分类|&#xff08;一&#xff09;IMDB影评数据集准备 Mindspore框架循环神经网络RNN模型实现情感分类|&#xff08;二&#xff09;预训练词向量 Mindspore框架循环神经网络RNN模型实现…

Ubuntu上编译多个版本的frida

准备工作 Ubuntu20(WSL) 略 安装依赖 sudo apt update sudo apt-get install build-essential git lib32stdc-9-dev libc6-dev-i386 -y nodejs 去官网[1]下载nodejs&#xff0c;版本的话我就选的20.15.1&#xff1a; tar -xf node-v20.15.1-linux-x64.tar.xz 下载源码 …

科研论文之Word论文编辑

这篇文章介绍在word中怎么编辑论文&#xff0c;包括论文的模板、论文的字体设置、论文的插图、论文的参考文献等等。 为便利知识传播&#xff0c;我的所有文章都不会设置收费专栏。但文章写作不易&#xff0c;如有可能麻烦打赏一下&#xff0c;金额随意。收款码见下图&#xff…

Ubuntu下手动部署Java项目

1.1 打包项目上传至Ubuntu 1.2 java -jar 项目压缩包 1.3 确认防火墙打开 1.4 令进程在后台运行 nohup java -jar boot工程.jar &> hello.log & 1.5 停止项目运行 查看进程号&#xff0c;杀掉进程

基于微信小程序+SpringBoot+Vue的刷题系统(带1w+文档)

基于微信小程序SpringBootVue的刷题系统(带1w文档) 基于微信小程序SpringBootVue的刷题系统(带1w文档) 本系统是将网络技术和现代的管理理念相结合&#xff0c;根据试题信息的特点进行重新分配、整合形成动态的、分类明确的信息资源&#xff0c;实现了刷题的自动化&#xff0c;…

axure制作切换栏--动态面板的应用

先看下效果&#xff1a;点击上面的切换栏 切换到西游记栏目&#xff1a; 切换到水浒传栏目&#xff1a; 上述两个图片比对可以发现&#xff0c;在点击切换栏的时候&#xff0c;里面的内容以及切换栏的下面蓝色横线也会发生对应的变化。这里涉及到两个地方的变化&#xff0c;就…