parseexception是什么异常_出现异常怎么办?死了都要try

​还记得那首火遍大江南北的音乐《死了都要爱》么?在程序员群体中也有一首类似的歌~

66945cb13ff42f86b303f5f45f50b9c3.png

歌名:《死了都要try》

歌手:程序猿

死了都要try

不抓住异常不痛快

BUG多深,只有这样,才不用重来

死了都要try

不catch够我不痛快

程序毁灭throw还在

把每天,当作程序来更改

一改一天,都累到泪水掉下来

不理会,老板是看好或看坏

只要有工资,来还贷

改,不是需求做的太坏

那是客户想要什么,自己都不明白

忍受现在,自己一生都还不完的贷

很多模块,不能完成,我还得改

死了都要try

不catch够我不痛快

程序毁灭throw还在

不得不说,这首歌的歌词简直不要太真实了,说出了广大程序员同胞的心声。

这首歌在说啥?

其实就是在说异常,其中里面的try,catch,throw,便是3个关键字。

一、异常的回顾

回顾下抓取异常的方式

2c5bfdd81f2588e95f07ff19c6bf9dbf.png

非常地好理解:

try:尝试的意思,也就是说这块代码可能有问题,我就尝试着把它用大括号框起来,以防它出错。

catch:抓取的意思,我先指定一个异常,如果try里面的代码出现了这个异常,就把它抓取了。

抓取有什么用?能保证程序不会蹦。

catch可以有多个,但是只能抓取对应的异常,数组越界异常只能用来抓取数组越界异常,出现其他的异常它就没法管了。

这就好比,这个国家的陆军只能管陆军,空军只能管空军一样。但不管是陆军还是空军,国家都可以管。

所以Eception,无论是数组越界异常,还是字符串越界异常,它都可以管。

finally:无论怎么样,都会运行。

再回顾下异常里的继承体系:

b378003ab1335ac2495ea2640338f6fb.png

和程序员打交道的主要是Exception。

Exception又分有两大类:

  • ParseException:编译异常,不解决没法运行,必须处理。
  • RuntimeException:运行异常,编译期间可以不处理,但是可能发生在运行时期。

常见异常有哪些呢?不要被异常长长的一段字符吓到,其实只要拆开了看还是蛮好理解的。

ArrayIndexOutOfBoundsException

Array:数组;OutOfBounds:超出了界限。所以是数组越界异常。

StringIndexOutOfBoundsException

String:字符串;Index:索引;OutOfBounds:超出了界限。所以是字符串越界异常。

IllegalArgumentException

Illegal:非法的;Argument:参数;非法的参数。所以是非法参数异常。

NullPointerException

NullPointer:空指针。所以是空指针异常。

二、自定义异常

在开发过程中,我们要遇到的问题可以说是很多很多的。

那么问题来了,Java里面定义的异常是很有限的,一共就那么些异常,所以有时候就需要我们自定义异常来说明情况。

在Java里面,一切万物就可成类,自定义异常,就是自己创建一个异常类。

  • 编译期异常:自定义类并继承于Exception
  • 运行期异常:自定义类并继承于RuntimeException。

比如说现在有一个类Person,它有姓名和年龄两个属性:

现在有个用户填年龄时就是要填-18岁,怎么办?

e4a98f94ed8885c3e524ccd2fb7a5b46.png

很显然,年龄是不可能-18岁的,如果类的成员变量没有封装,用户是直接可以随便修改的,显然这样是不行的,所以封装的作用就出来了。

什么叫封装?

通俗点说就是:用户没法直接修改属性了,而是通过方法修改,这样的话,我就可以在方法里面加一个判断,你若是输入的数据不合适,你就没法修改属性成功。

这就是封装的意义。

好,现在我们在方法里,设定一个年龄规则,用户输入的数字若是不在这个范围里面,就会抛出异常,并且提醒用户。

bbf098a445804bce1e809b38ec0c2a5d.png

好,现在问题又来了,产品经理看了之后,觉得你写的这个RuntimeException它看不懂,他要年龄异常(ArgException),这样更加地直观。

可是Api里面又没有ArgException这个异常。

要知道产品经理是会对程序员提各种各样的需求的,原则上程序员是需要满足产品经理提的要求的,但是有些产品经理又不怎么懂技术,就会乱提要求。

我记得有一年平安的产品经理就和程序员发生了矛盾,双方大打出手,还上了热搜,闹得沸沸扬扬的。

当时产品经理提的要求好像是:

用户使用平安APP时,APP界面颜色要和用户的手机壳颜色一样。

当时程序员就觉得,这怎么弄?没法做,产品经理又要做,于是两个人就打起来了。

当然,这个需求能否通过技术上的手段解决我也不清楚。

回到我们自定义异常的问题,产品经理说要ArgException,怎么办?

自定义一个异常就好了。

361e18b9f23678fac2246da9d1428739.png

异常里面的底层到底是如何处理的,我们清楚么?

我们不清楚,那不清楚怎么写?

这个时候,面向对象第二个特性:继承的作用就出来了。

我不需要知道怎么写,我只需要继承某个异常就好了,父类是怎么处理的,我直接使用它的方法就好了。

这就是自定义异常,特别简单。

总结:
c7c9ac141c330d7a185cd8172d481faf.png
  • 10
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值