当前位置: 首页 > news >正文

浅谈异常与恋爱

在java的异常结构中有一个顶级父类叫做Throwable,这个父类具有两个子类,分别是:

Error

Exception

为了便于初学者能更好的理解异常机制,我姑且先列举一些不恰当的例子:

可以这样理解Error

1.你某天很舒服的坐在沙发上看电视,你爸突然把你拉到书房里语重心长的对你说:

“你和她不能在一起,她其实是你失散多年的亲妹妹”(神马感觉,心里一万只草泥马在奔跑对不对?)

2.终于能在一起了,尼玛突然在她房间抽屉发现当年变性手术的费用单(这次不只一万只了)。

两个例子都有一个共同点,就是你不会和她继续在一起了,你们的结合会是一种Error(错误),是硬伤!!!

对于这种根本无法解决或无法隐忍的情况就是所谓的Error,懂了吧

而在java语言中,Error则是代表硬件,jvm或代码本身存在问题

虽然你对于无法处理这一情况很不甘心,但你还是会一遍遍检查配置和你的代码,以期望能够解决

再看看Exception

把致命问题Error排除了(她是个好女孩),现在你和她能够在一起(程序能够继续执行)又多了一份希望

但是,你仍然不能掉以轻心

两个人相处,难免会产生一些不好的情绪,一旦你没能处理好,那么两个人的感情还是over(程序无法继续执行)

在这里,Exception就是那些你要处理的情绪问题的总称

为什么是总称呢?因为大脑产生的情绪(异常)非常复杂,还可细分为各种情绪(纠结体)……

我们判断一个人的情绪是靠经验,比如产生这种坏情绪后,她有哪些行为和反映

在java里,Exception是一个父类,它还有很多的子类(也就是各种坏情绪的封装)

你看,就这么简单,我们就理解了整个java的异常体系

Throwable下的两个已知子类,Error和Exception

Exception下的各个细分的异常

既然我们了解了java的异常体系,也知道了Error是无法处理的,那么我们能做的就是针对Exception的操作了

也就是在恋爱过程中,我们对她坏情绪的处理,好让两个人的感情能够继续……

那么如何操作呢?

很简单,你只需要进行判断和测试,确认她的行为是否符合你经验中她这一坏情绪的反映,然后做出处理就行了

相信你一定知道基本的除数为0异常,这里就不再写了,任何一本基础书都有

为了避免针对性的代码造成不好理解,我们下面都写伪码

实例1:典型的try...catch结构

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

//女友为什么是public?因为谁都能追

publicclassGirlFriend {

//还记得吗?你们的故事就是从这开始的

publicstaticvoidmain(String[] args) {

//我们用try包裹的代码来判断和测试她不稳定的坏情绪

try{

她小情绪的反映

她小情绪的行为

她小情绪的眼神

……

//在实际中则是Exception e,你肯定知道

//为什么有个e对象,都说了异常也是一种类

//所谓的catch就是捉到她坏情绪的原因,并进行处理

}catch(工作累了异常 e) {

//打印异常信息,你可以认为是她在诉说原因

//实际中我们要结合场景来处理

e.printStackTrace();

}

}

}

你看,这样我们就能有针对性的处理单个异常了,在try里面测试

catch里面进行处理

当然,有时候一个人情绪不好是由于多种原因,那么你只能小心翼翼的根据经验

来捕捉更多的异常(坏情绪的封装对象),此时你也就需要多条catch语句了

实例2:复合的catch语句

1

2

3

4

5

6

7

8

9

10

11

12

13

14

try{

......

}catch(工作累了异常 e) {

捶背

}catch(口渴了异常 e) {

倒水

}catch(被鄙视了异常 e) {

安慰

//这里的Exception是所有坏情绪的父类

}catch(Exception e) {

各种安慰

各种献殷勤

各种倾听

}

为什么所有坏情绪对象(Exception)要放到最后捕捉呢?

很好理解,当你在无法确定她到底是累了,渴了还是怎么地产生的坏情绪时

你便可以认为,反正她就是特么的很烦,想闹脾气,你得处理!!!(不然就over)

好吧,你看到了,不论是讨好女友还是处理异常,都是一件相当不爽的事

下面我们来看看一个很简单,很朴实的关键字finally

实例3:finally语句的使用

1

2

3

4

5

6

7

8

9

10

11

try{

......

}catch(Exception e) {

//Todo

}finally{

不管你特么心情好不好

反正都是老子洗碗!!!

靠……

}

看,finally好用吧,你可以这样理解

是男人就应该默默的承担,不管有没有异常,我都执行

在java中,finally最常用的场合就是最后关闭io流对象了,可见我写的另一篇笔记

至此,我们已经讲完了java异常的基础操作

新手可能会问,咦?throws和throw两大关键字去哪儿了

别急,咋慢慢来,去端杯茶缓缓……

对于throws在java中的意思是,让调用处去处理这一异常

就比如说她们受了一顿闷气,本来你不说还没什么,你一说她们就忍不住了

把所有的火都对你发,谁让你要去惹她们的?

自己可以处理却不处理,俺们就叫做throws,一般在方法后面使用

实例4:throws的用法

1

2

3

4

5

6

7

8

publicvoid降低愤怒()throws愤怒的异常 {

/*你看,在这里明明可以try...catch的

但是却没有,把异常给抛到了调用处*/

......//这是处理方法,此处省略N行代码

}

本来在降低愤怒()这一方法中可以try...catch的,但是不想,要留给招惹它的人

那就用throws吧,谁惹我谁遭殃

其实,女人是一种很奇怪的动物,她们有时候会假装自己生气

从而达到让你哄的目的,典型的欠try有木有……

那么,这个时候throw就发挥了作用

在java中,throw表示人为的抛出一个异常

实例5:throw的用法

1

2

3

4

5

publicvoidthrowMethod()throwsException {

thrownew发嗲了异常("干爹,你来~~"

}

这里在throwMethod方法中我们人为抛出了一个发嗲了异常,然后给调用处try

至于catch部分的内容,你们自己看着办……(尼玛,我才19怎么就那么邪恶了)

再来,我们在翻看API文档的时候也许会发现类似下面的方法

它们明明抛出了异常,而我们在使用中却没有try,这是怎么回事?

这叫做RuntimeException,也就是运行时异常,它们可try可不try

因为一旦产生这种异常就说明你的代码可能存在问题,比如数组下标越界等

此时,try...catch意义不大,检查和修改源码才是最佳选择

http://www.jsqmd.com/news/1118480/

相关文章:

  • 4步诊断与优化:打造你的全平台音乐聚合系统
  • Si4732与MKV44F256VLH16数字收音方案设计与优化
  • 一键下载国家中小学智慧教育平台电子课本的终极解决方案
  • 从“本草清”牙膏到万亿市场:GEO 不只是排名,更是 AI 时代的“标准答案”
  • 高精度电压测量方案:KMR221传感器与PIC32MZ MCU实战
  • STM32F412ZG与SLO2016异构计算架构解析与优化
  • 终极解密:JSXBin到JSX转换器如何彻底解决Adobe脚本黑盒难题
  • 套接字Socket通信编程
  • Bifrost:三星固件下载的终极跨平台解决方案
  • OpenSpeedy:为Windows游戏体验注入速度魔法的开源神器
  • Zotero PDF2zh:让学术文献翻译变得简单高效
  • Windows 11终极优化指南:用Win11Debloat让系统更快更安全
  • AI大模型赋能自动化测试:auto-wing工具实战解析与避坑指南
  • Navicat无限试用重置方案:macOS用户的终极破解指南
  • 工业4-20mA电流环检测与STM32 ADC优化设计
  • STM32与74HC32实现2x2键盘的硬件与固件设计
  • Claude Code 国内部署与实战:AI 编程代理的完整应用指南
  • .NET 高级开发 | http 接口对接和客户端开发技巧
  • 笔者为某云计算公司产品经理,负责产品的产品设计与前端开发管理。在工作引发了公司级别对产品和设计的讨论,有了以下文章。原文均作为邮件发在公司内部,以下截取出来希望收到更多的讨论。weibo:@侯振宇L4
  • 6DOF运动追踪系统设计与IMU姿态解算优化
  • 工业4-20mA电流环发射器设计与优化实践
  • 如何让Unitree Go2机器人具备ROS2环境感知与自主导航能力
  • CBCX平台:围绕合规意识与外汇行业合规表达的清单复盘
  • 智能客流分析:从计算机视觉到多模态感知的商业应用
  • 【JAVA毕设源码分享】基于springboot智能药箱系统的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 从AI代码风格到工程实践:Codex Taste如何重塑开发者的代码质量观
  • 通达信缠论插件:3分钟让复杂技术分析变得可视化
  • 3步彻底优化Windows 11:这款开源神器让系统轻快又安全
  • STM32F407ZG与LV30工业条码扫描器集成方案
  • C语言实现量子密钥分发(BB84)协议:从原理到代码实战