写点什么

java 零基础入门 - 异常、线程 (下)

作者:喵手
  • 2022 年 7 月 24 日
  • 本文字数:3522 字

    阅读完需:约 12 分钟

java零基础入门-异常、线程(下)

哈喽,各位小伙伴们好,我是喵手。

今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流 学习,互相学习,才能成长的更快,对吧。

我是一名 java 开发,所以日常接触到最多的就是 java 啦,所以我趁自己有空,就来好好回忆,把自己学到的会的,进行输出,不图什么有回报,只想能帮助到更多的小伙伴,就好。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对喵手我创作道路上最好的鼓励与支持!

一、前言

       论前几期啊,我们是分别讲了Object类Date类FormDate类Calendar类System类StringBuilder类,不知道大家掌握的如何,如果没有及时巩固的同学,可以看我这里,我给大家罗列了下,快速学习通道,只希望能帮助到大家更好的学习与成长,这就是我写作的初衷。

       这一期我们要学习的知识点相对还是较多的,不知道大家做好了准备接收没有,这一期不仅要学习如何声明异常,捕获异常还要学习异常如何去处理等相关实操,希望大家都能在这一期中有所收获。

二、本期教学目标

  • 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 !!!

-------------------------------------------

⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

-------------------------------------------

发布于: 4 小时前阅读数: 10
用户头像

喵手

关注

还未添加个人签名 2022.07.05 加入

还未添加个人简介

评论

发布
暂无评论
java零基础入门-异常、线程(下)_Java_喵手_InfoQ写作社区