java 零基础入门 - 异常、线程 (下)
哈喽,各位小伙伴们好,我是喵手。
今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流 学习,互相学习,才能成长的更快,对吧。
我是一名 java 开发,所以日常接触到最多的就是 java 啦,所以我趁自己有空,就来好好回忆,把自己学到的会的,进行输出,不图什么有回报,只想能帮助到更多的小伙伴,就好。
小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对喵手我创作道路上最好的鼓励与支持!
一、前言
论前几期啊,我们是分别讲了Object类
、Date类
、FormDate类
、Calendar类
、System类
及StringBuilder类
,不知道大家掌握的如何,如果没有及时巩固的同学,可以看我这里,我给大家罗列了下,快速学习通道,只希望能帮助到大家更好的学习与成长,这就是我写作的初衷。
这一期我们要学习的知识点相对还是较多的,不知道大家做好了准备接收没有,这一期不仅要学习如何声明异常,捕获异常还要学习异常如何去处理等相关实操,希望大家都能在这一期中有所收获。
二、本期教学目标
Objects 类之非空判断源码分析。
掌握如何通过 throws 声明异常。
掌握如何捕获异常。
掌握如何使用 finally 关键字使用。
掌握异常处理注意事项。
三、正文
1、Objects 类
这个类想必大家都比较熟悉,特别是判断一个对象是否为空,就很习惯使用该类提供的 isNull()方法,可是有没有去看过它的实现源码?不知道大家有没有注意到它源码的该方法 requireNonNull(),作用就是:判断校验饮用对象是否为 null。而它的做法就是对空对象进行了异常抛出,通过使用 throw 关键字。
异常不是说只有我们自己在正常编码中才会涉及,在很多方法源码中也是贯穿使用的,所以要学好异常,还是有很多地方是值得我们大家去挖掘与研究的。
2、声明异常 throws
上方所演示的 Objects 类就对异常有做抛出处理,而对于异常的声明,可就是用 throws 关键字了,何为声明?就是说将问题标识出来,反馈给调用者。
如果方法内通过 throw 抛出异常,而没有捕获异常,那你就必须通过 throws 进行声明,继续抛出去,让调用这个方法的调用者去处理。
那 throws 如何使用呢?如下是声明异常格式:
给大家举个例子,这样你们就能看得明白了。
具体请看如下示例,仅供参考:
演示截图:
解释一下:我只是给大家做个演示如何进行异常声明,假设不是[ “red.book” ]即进行异常抛出。接着调用者也要对该异常进行声明或者做出处理。上方可以看到我 main 方法调用 see()方法也是直接将异常声明了出去。
还有一点,throws 进行异常声明,若该方法可能存在多种异常出现,那你就可以在 throws 后面写多个异常类,用逗号隔开即可。
比如如下演示:
点击并拖拽以移动那这样无限进行异常声明?也不是,你也可以对异常进行捕获自行处理。那怎么捕获?请接着看第三讲 try...catch 的使用。
3、捕获异常 try...catch
try...catch 就是对异常进行捕获处理的方式,这也是 java 提供的对异常有针对性的语句进行捕获,对出现的异常进行指定方式处理。
捕获异常语法如下:
说明一下:
try:该代码块中编写可能产生异常的代码。
catch:用来捕获异常,实现对捕获的异常进行处理。
注意:try、catch 必须连用,不能分开独用!
接下来我就还是按第二讲的那个例子来举例演示:
执行 main 方法控制台打印结果截图:
其中 Throwable 类中也定义了一些查看方法:
getMessage():获取异常的描述信息,异常原因(反馈给调用者,就提示错误原因,而不带异常类型)。
printStackTrace():打印异常跟踪栈信息并输出到控制台。
toString():获取异常的类型和异常描述信息(基本不用),直接输出即可。
具体演示可看下方截图:
4、finally 代码块
finally 关键字,作用就是:在一些特定的代码无论异常是否出现,都需要执行,就可用它。比如很多处境,发现异常会导致程序执行不到,而 finally 就正好解决了这个问题,在 finally 代码块中的代码就一定会被执行的。
那 finally 关键字怎么使用呢?注意啊,它也不能单独使用,必须和 try...catch 连用。
finally 语法:
接下来给大家举个例子演示一下吧,省的大家看的一愣一愣的。
示例代码:
具体演示可看下方截图:
这是刻意制造会出现异常的情况.
这是不出现异常的情况:
这样对比演示,你们总能弄明白吧。
5、异常处理注意事项
如上讲的都是对一个异常进行捕获,倘若一个方法同时出现多个异常,那又得怎么捕获处理呢?其实啊,这也好办,多次 catch 就可以了呀。
比如如下模板:
点击并拖拽以移动有多少个异常就 catc 多少次。但是有个要求,对于多个 catch,其中的异常类型不能相同,若 catch 中多个异常偶子父异常关系,那么子类异常要求在上面的 catch 处理,父类异常在下,这得按照异常子父顺序来 catch。
... ...
好啦,以上就是本期内容的全部教学内容啦,如果对文中的任何知识点有疑问,欢迎评论区评论留言呀,我看见都会一一解答的。
四、文末
教学是结束了,但是有些话不知我但讲不当讲,啊哈哈, 可我还是想说给你们听听。如下是我很喜欢的一句话,我打算送给你们,希望我们都能变得更好更优秀。
学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!
wished for you successed !!!
-------------------------------------------
⭐️若喜欢我,就请关注我叭。
⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。
-------------------------------------------
版权声明: 本文为 InfoQ 作者【喵手】的原创文章。
原文链接:【http://xie.infoq.cn/article/03d3650df2c81e53136437f9f】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论