《Java源力物语》-2.异常训练场

在这里插入图片描述

~犬📰余~

“我欲贱而贵,愚而智,贫而富,可乎?
曰:其唯学乎”

\quad 在java.lang古域的一处偏僻角落,矗立着一座古老的训练场。青灰色的围墙上布满了密密麻麻的源力符文,这些符文闪烁着微弱的光华,仿佛在诉说着无数源力使用者在此经历的试炼。这里是源力使用者们磨练应对意外情况的圣地。这天,年轻的String在Object长者的引导下来到此处。
请添加图片描述
\quad "这些符文…似乎在记录着什么。"String好奇地打量着墙壁。
\quad "好眼力。"Object长者微笑着说,“这些都是前人处理异常的经验教训。看到这个发着红光的符文了吗?那是在记录着一位源力使者因为没有正确处理’资源关闭’,最终导致严重事故的教训。”
\quad String若有所思地点点头。Object长者继续道:“孩子,掌握源力不仅要专注于创造,更要学会应对各种异常。优秀的源力使用者,不仅要在风平浪静时游刃有余,更要在异常发生时处变不惊。让我来介绍一位老朋友。”
\quad 随着长者的话音落下,一位身披红袍的高大身影从训练场深处走来。他的袍子上绣着复杂的异常层级图谱,从最上层的Throwable一直延伸到各个具体的异常类型。“这位是Throwable大师,是处理一切异常情况的智者。”
请添加图片描述
\quad "欢迎来到异常训练场,年轻的String。"Throwable大师神情严肃,“在源力宇宙中,异常无处不在。有些是可以预见的Exception家族,比如我的弟子RuntimeException;还有些是致命的Error家族成员。要记住,异常不是敌人,而是提醒我们注意风险的警示。今天,我们就来实战演练。”
\quad 训练场中央,地面上浮现出复杂的源力纹路,形成了多个嵌套的区域。"这是’多重防御阵法’,"Throwable大师解释道,“外层是try区域,中间是各个catch防御圈,最内层是finally必达之地。记住,finally中的源力一定会运行,无论前面发生了什么。”
请添加图片描述
\quad "第一课:基础异常捕获。"Throwable大师打了个手势,一个浑身闪着金光的球体出现在String面前,“这是一个’源力资源’,尝试对它进行操作。”
\quad String小心翼翼地伸出手,刚要触碰那个球体,一道尖锐的异常之力突然从暗处袭来!"小心,这是索引越界异常!"Object长者提醒道。String迅速在外围布置了防御屏障,那道异常之力撞击在屏障上,被轻松化解。
\quad "做得好!"Throwable大师点头,"但现在,让我们面对更复杂的情况。"随着他的话音,训练场地面升起了三个蕴含不同源力的球体,每个球体都散发着独特的能量波动。
\quad "这些都是需要被妥善处理的资源,“大师解释道,“它们就像打开的源力之门,使用完必须及时关闭。”
\quad String观察着这些球体,发现可以布置一种特殊的防御阵法,能够自动感知资源的状态,并在使用完毕后自动关闭源力之门。这就是大师所说的"自动关闭防御阵”。
\quad 训练场中突然电光闪烁,数个不同类型的异常接连袭来!数据库异常化作赤红闪电,输入输出异常如同翻滚的黑雾,还有各种运行时异常犹如离弦之箭!String迅速调整防御策略,布置出多层防御屏障,每层专门负责处理一种异常。
请添加图片描述
\quad "注意!"Throwable大师高声提醒,“有些异常必须明确处理,比如那些带着红色源力波动的’受检异常’;而另一些则是由你自己决定是否处理,就像那些闪着蓝光的’非受检异常’。选择权在你,但责任也在你。”
\quad 训练持续进行着。String不断提升着自己的异常处理技巧。他学会了在危险区域做好防护,为不同类型的异常准备相应的应对方案,并确保在一切结束后进行必要的清理。最重要的是,他明白了有些异常是无法独自处理的,需要寻求更强大的源力使用者的帮助。
\quad "源力宇宙中的一切都是相连的,"Object长者循循善诱,“当你遇到无法处理的异常时,不要强行处理,可以让它继续向上传递。这种’异常传播’的智慧,往往比硬撑更为可贵。”
\quad 就在这时,训练场的源力突然剧烈波动,地面开始颤抖,天空变得一片灰暗。一道狰狞的OutOfMemoryError撕裂空间闪现!这是Error家族中最危险的成员之一!
请添加图片描述
\quad "危险!这个等级的Error非同小可!"Throwable大师神色凝重,“它们代表着系统级的灾难,一般的防御对它们无效。这种情况下,最明智的做法是立即撤离,保存现场,等待系统级的修复。快撤离try区域!”
\quad 在Object长者和Throwable大师的协助下,String安全撤离。这次意外让他深刻认识到:异常处理不仅是一种防御机制,更是源力使用者必备的生存技能。
\quad "今天学到了很多。"回程路上,String回想着训练的点点滴滴,“不过我听说NullPointerException也是个非常棘手的家伙…”
\quad "哈哈,"Object长者笑着说,“空值引用确实是个特殊的问题。在源力宇宙中,'空’既是最简单的概念,却又暗藏着最多的陷阱。不过这就是下一课的内容了。”

知识点总结

一、异常体系结构

Java的异常体系以Throwable为根,下分为Error和Exception两大类:

  • Error:表示严重的系统级错误,如OutOfMemoryError,这类错误通常是不可恢复的
  • Exception:表示程序可以处理的异常,又分为两类:
    • RuntimeException及其子类:非受检异常
    • 其他Exception:受检异常

二、异常处理机制

Java使用try-catch-finally结构处理异常:

  • try块:包含可能抛出异常的代码
  • catch块:捕获并处理特定类型的异常,可以有多个catch块处理不同类型的异常
  • finally块:无论是否发生异常都会执行的代码,通常用于确保资源正确释放

三、异常分类

受检异常(Checked Exception)

  • 必须显式处理或声明抛出
  • 代表可预期的异常情况
  • 例如:IOException

非受检异常(Unchecked Exception)

  • 不强制处理或声明
  • 包括RuntimeException及其子类
  • 例如:NullPointerException

四、关键概念

  • 异常处理原则
    • 根据异常类型选择合适的处理方式
    • 不是所有异常都需要捕获处理
    • 可以将异常向上层传递
    • 确保正确释放资源
  • Error的特殊性
    • 表示严重的系统级问题
    • 通常不需要在代码中处理
    • 遇到Error时应该保存现场,等待系统恢复
  • 资源管理
    • 使用后必须正确关闭资源
    • 推荐在finally块中进行资源清理
    • 确保在异常发生时也能释放资源
      在这里插入图片描述
关注犬余,共同进步

技术从此不孤单

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

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

相关文章

一起学Git【第二节:创建版本库】

创建库 这个库相当于一个目录,目录中的文件都被Git管理,会记录每个文件的修改删除和添加工作,便于之后随时跟踪历史记录还原到之前的某一版本。如何创建库呢?有两种方式,本地创建库和云端克隆一个库。 1.本地创建库 …

HarmonyOS NEXT 技术实践-基于基础视觉服务的多目标识别

在智能手机、平板和其他智能设备日益智能化的今天,视觉识别技术成为提升用户体验和智能交互的重要手段。HarmonyOS NEXT通过基础视觉服务(HMS Core Vision)提供了一套强大的视觉识别功能,其中多目标识别作为其关键技术之一&#x…

nginx-静态资源部署

目录 静态资源概述 静态资源配置指令 listen指令 server_name指令 精确匹配 ​编辑 ​编辑 使用通配符匹配 使用正则表达式匹配 匹配执行顺序 default_server属性 location指令 root指令 alias指令 root与alisa指令的区别 index指令 error_page指令 直接使用 …

时空信息平台架构搭建:基于netty封装TCP通讯模块(IdleStateHandler网络连接监测,处理假死)

文章目录 引言I 异步TCP连接操作II 心跳机制:空闲检测(读空闲和写空闲)基于Netty的IdleStateHandler类实现心跳机制(网络连接监测)常规的处理假死健壮性的处理假死方案获取心跳指令引言 基于netty实现TCP客户端:封装断线重连、连接保持 https://blog.csdn.net/z92911896…

Linux之RPM和YUM命令

一、RPM命令 1、介绍 RPM(RedHat Package Manager).,RedHat软件包管理工具,类似windows里面的setup,exe是Liux这系列操作系统里而的打包安装工具。 RPMI包的名称格式: Apache-1.3.23-11.i386.rpm “apache’” 软件名称“1.3.23-11” 软件的版本号&am…

aosp15 - Activity生命周期切换

本文探查的是,从App冷启动后到MainActivity生命周期切换的系统实现。 调试步骤 在com.android.server.wm.RootWindowContainer#attachApplication 方法下断点,为了attach目标进程在com.android.server.wm.ActivityTaskSupervisor#realStartActivityLock…

【漫话机器学习系列】017.大O算法(Big-O Notation)

大 O 表示法(Big-O Notation) 大 O 表示法是一种用于描述算法复杂性的数学符号,主要用于衡量算法的效率,特别是随着输入规模增大时算法的运行时间或占用空间的增长趋势。 基本概念 时间复杂度 描述算法所需的运行时间如何随输入数…

ensp 基于端口安全的财务部网络组建

ARP IP数据包通过以太网发送,但以太网设备并不能识别IP地址,它们是以MAC地址传输的。因此,必须把IP目的地址转换成MAC目的地址。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。 ARP&…

在 Ubuntu 上安装 Muduo 网络库的详细指南

在 Ubuntu 上安装 Muduo 网络库的详细指南 首先一份好的安装教程是非常重要的 C muduo网络库知识分享01 - Linux平台下muduo网络库源码编译安装-CSDN博客 像这篇文章就和shit一样,安装到2%一定会卡住,如果你不幸用了这个那真是遭老罪了 环境&#xf…

Idean 处理一个项目引用另外一个项目jar 但jar版本低的问题

当在idea中一个module A引用另外一个项目B的jar,但是从私服仓库中拉下的jar版本比较低导致编译不通过时,可以把项目B拉下来,重新编译打包jar跟新到本地的仓库 选中右边菜单的Maven 选中对应的项目B-》Lifecycle->双击 install也可以按住c…

Windows下安装Rabbit MQ

一、安装环境: 系统:windows11; 环境配置安装:otp_win64_25.3.2.14.exe(erlang类库); 服务应用安装:rabbitmq-server-3.12.4.exe; 二、erlang环境: 1.执行…

生态学研究中,森林生态系统的结构、功能与稳定性是核心研究

在生态学研究中,森林生态系统的结构、功能与稳定性是核心研究内容之一。这些方面不仅关系到森林动态变化和物种多样性,还直接影响森林提供的生态服务功能及其应对环境变化的能力。森林生态系统的结构主要包括物种组成、树种多样性、树木的空间分布与密度…

基于UNITY3D的照片墙演示项目技术分享

unity实现超大图片墙演示,由于拥有海量图片,使用了CPU 多线程,unity dots技术,图片组成文字部分,使用了点阵图技术,提取文字像素。 (关于点阵介绍) 点阵字体是把每一个字符都分成1616或2424个点…

设计模式-访问者设计模式

介绍 访问者模式(Visitor),表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变个元素的类的前提下定义作用于这些元素的新操作。 问题:在一个机构里面有两种员工,1.Teacher 2.Engineer 员…

ISO/IEC 25010:2023 系统和软件的质量模型(产品质量模型)

本文是对ISO/IEC 25010 2023年底第2版:系统和软件工程-系统和软件质量要求与评估 (SQuaRE)-产品质量模型一文的转载,此外还参考了ISO/IEC 25019:2023(en) Systems and software engineering — Systems and software Quality Requirements and Evaluatio…

【零基础保姆级教程】制作自己的数据集——Labelimg的安装与使用及常见的报错解决方法

1.是什么 LabelImg 是一个图形化的图像标注工具,主要用于机器学习和计算机视觉领域中的数据预处理。它是由 GitHub 用户 tzutalin 开发的开源项目,基于 Python 和 Qt 框架编写。LabelImg 允许用户手动为图像添加边界框(bounding boxes&#…

【java基础系列】实现数字的首位交换算法

在java中&#xff0c;手写实现一个数字的首位交换算法实现 实现效果 实现代码 核心业务代码 public static void main(String[] args) {int[] arr {1,2,3,4,5};int temp arr[0];for (int i 0; i < arr.length; i) {System.out.print(arr[i]);}System.out.println(&quo…

【java面向对象编程】第七弹----Object类、类变量与类方法

笔上得来终觉浅,绝知此事要躬行 &#x1f525; 个人主页&#xff1a;星云爱编程 &#x1f525; 所属专栏&#xff1a;javase &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 一、Object类 1.1equa…

GO--堆(have TODO)

堆 堆&#xff08;Heap&#xff09;是一种特殊的数据结构。它是一棵完全二叉树&#xff08;完全二叉树是指除了最后一层外&#xff0c;每一层上的节点数都是满的&#xff0c;并且最后一层的节点都集中在左边&#xff09;&#xff0c;结放在数组&#xff08;切片&#xff09;中…

java开发入门学习五-流程控制

流程控制语句 if&#xff0c; if...else&#xff0c; if..else if..else 与前端相同 略 switch case 与前端不同的是case不能使用表达式&#xff0c;使用表达式会报错 class TestSwitch {public static void main(String[] args) {// switch 表达式只能是特定的数据类型…