专栏首页零基础自学Java【Java】基础29:出现异常怎么办?死了都要try

【Java】基础29:出现异常怎么办?死了都要try

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

歌名:《死了都要try》

歌手:程序猿

死了都要try

不抓住异常不痛快

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

死了都要try

不catch够我不痛快

程序毁灭throw还在

把每天,当作程序来更改

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

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

只要有工资,来还贷

改,不是需求做的太坏

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

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

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

死了都要try

不catch够我不痛快

程序毁灭throw还在

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

这首歌在说啥?

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

一、异常的回顾

回顾下抓取异常的方式

非常地好理解:

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

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

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

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

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

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

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

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

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

Exception又分有两大类:

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

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

ArrayIndexOutOfBoundsException

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

StringIndexOutOfBoundsException

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

IllegalArgumentException

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

NullPointerException

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

二、自定义异常

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

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

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

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

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

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

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

什么叫封装?

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

这就是封装的意义。

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

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

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

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

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

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

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

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

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

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

自定义一个异常就好了。

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

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

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

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

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

总结:

本文分享自微信公众号 - 刘小爱(liuxiaoai946),作者:刘小爱

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【Java】基础28:什么叫异常?

    闪退,我们在使用手机或者电脑的过程中,有时会遇到这种情况,这也是用户最讨厌的情况之一。

    刘小爱
  • 微服务】155:商品新增业务(完)

    这也很好理解,get请求是将参数拼接到路径后面的,而新增的请求参数是有很多的,如果用get请求,那请求路径就很长一串的了。

    刘小爱
  • 【微服务】169:搜索页面的请求与响应

    使用axios发送请求,当然为了后续方便,axios被封装到了自定义的common组件中。

    刘小爱
  • Java面试题系列之基础部分(六)——每天学5个问题

    Java基础部分学习的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io的语法,虚拟机方面的语法,这些都是最基...

    用户1289394
  • 数据分析之异常值处理

    异常值是我们在数据分析中会经常遇到的一种特殊情况,所谓的异常值就是非正常数据。有的时候异常数据对我们是有用的,有的时候异常数据不仅对我们无用,反而会影响我们正常...

    张俊红
  • 我为什么反对用异常做流程控制?

    像SSH/M这种基础框架的出现,让不少程序员“瘫痪”成了流水线工人。以前小心翼翼方能写就的逻辑分支判断,演变成了直接丢个异常然后坐等AOP拦截处理,此时的拦截器...

    曲水流觞
  • Java编程思想之通过异常处理错误

    1.     异常分为被检查的异常和运行时异常,被检查的异常在编译时被强制要求检查。异常被用来错误报告和错误恢复,但很大一部分都是用作错误报告的。

    用户3148059
  • 10 个深恶痛绝的 Java 异常。。

    异常是 Java 程序中经常遇到的问题,我想每一个 Java 程序员都讨厌异常,一 个异常就是一个 BUG,就要花很多时间来定位异常问题。

    Java技术栈
  • 重学计算机组成原理(十二) - 异常和中断

    一提到异常 (Exception),可能你的第一反应就是Java中的Exception。 不过我们今天讲的,并不是这些软件开发过程中遇到的“软件异常” 而是和硬...

    JavaEdge
  • 困扰开发人员的八大代码异常问题

    代码异常对于每个开发人员时时刻刻要面对的问题,兴奋的写完一段代码,信心满满的运行一下,结果一个异常给你当头 一棒,你还得意吗?异常处理的好不好,考验着每个开发人...

    用户1289394

扫码关注云+社区

领取腾讯云代金券