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