Java零基础入门-异常、线程(上)

举报
喵手 发表于 2024/12/20 23:43:20 2024/12/20
【摘要】 ​一、本期教学目标能够区别程序中异常和错误掌握异常有哪些分类能够说出虚拟机处理异常的方式二、概念今天这一期,虽然会有点枯燥,毕竟都是概念性的知识点,但是又不得不教学,因为这在日后的项目实战中,也是至关重要的,对于异常或报错,程序也是常见事物,如果你说你不会处理异常,岂不是会被笑掉大牙,那么到底什么是程序异常呢?1、概念        异常,顾名思义,就是不正常的意思,那到底对于该官方解释如下...

一、本期教学目标

  • 能够区别程序中异常和错误
  • 掌握异常有哪些分类
  • 能够说出虚拟机处理异常的方式

二、概念

今天这一期,虽然会有点枯燥,毕竟都是概念性的知识点,但是又不得不教学,因为这在日后的项目实战中,也是至关重要的,对于异常或报错,程序也是常见事物,如果你说你不会处理异常,岂不是会被笑掉大牙,那么到底什么是程序异常呢?

1、概念

        异常,顾名思义,就是不正常的意思,那到底对于该官方解释如下:指一个程序在执行过程中,出现了非正常的情况,最终会导致jvm虚拟机非正常停止,而这就是程序异常。

在java等面向对象编程语言中,异常也作为一个类,产生异常就是创建异常对象并抛出异常对象,而对于java而言,处理方式就是中断。但是有一点啊,大家要明显区分一下,异常并不是指程序语句语法有错,若语法有错,程序压根不可能通过正常编译的,更不会生成字节码文件,谈何运行呢,对吧。所有很多小伙伴在学到这一点的时候就会视觉错误,所以对于异常,想必大家是能有所理解了吧。

2、异常体系

        其实我们压根不要去害怕有异常,觉得有异常就觉得程序不正常,这是错误的认知。对于异常其实本就在帮助我们找到程序中有存在问题的地方,异常是一个类,根类是java.lang.Throwable,对于Throwable类它又有两个子类,分别为:

  • java.lang.Error
  • java.lang.Exception

        而我们上述所说的异常,其实就是该子类中的一个,大家猜猜是哪个?

        感兴趣的小伙伴也可以去看看相关源码,看看该子类都有那些常用方法,我这里就先不给大家演示这些了。毕竟我后续也会给大家讲,只是大家可以先去预习一下。

        上述不是提到了那两个子类Error与Exception。那你们知道为何上方这张图是一个只能尽量避免一个可以避免呢,你们知道这是为何?如果大家确实没有先去预习,那就看我给大家讲。      

  • java.lang.Error

表示严重错误error,无法通过编译的错误,只能编译前避免或者解决掉,比如人得了绝症,没办法解决掉。

  • java.lang.Exception

表示异常,指异常产生后是必须要处理的,可以通过代码的方式处理异常,比如人得了感冒、普通流感等,人肯定是能吃药就治好的。

3、Throwable常用方法

        上述说到大家要预先预习功课,而这里其实就算是大家对该源码的一点预习与结合我给大家讲的理论相结合,这样你们才能快速吸收并加以实际运用。

        说起类,基本都要知道类的常用基本方法,异常根类Throwable,我们这里就来给大家讲讲,它有哪些常用方法。

  • public void printStackTrace() :

作用:打印异常详细信息。其详情包含了异常的类型、原因,还包括异常出现的位置。在开发和调试阶段,都得使用printStackTrace帮助我们定位异常发现位置。

源码展示:

    public void printStackTrace() {
        printStackTrace(System.err);
    }
  • public String getMessage() :

作用:获取发生异常的原因。基本用法就是通过该方法获取异常原因好直接反馈用户错误原因。

源码展示:

    public String getMessage() {
        return detailMessage;
    }
  • public String toString() :

作用:获取异常的类型和异常描述信息,其实这个就与printStackTrace()有点功能重复了。

源码展示:

    public String toString() {
        String s = getClass().getName();
        String message = getLocalizedMessage();
        return (message != null) ? (s + ": " + message) : s;
    }

三、异常演示

        接下来,我就简单给大家制造一个代码发生异常的场景吧,比如我们都知道对于数组而言,它是有下标之说,也是通过下标指定获取数组中的某个元素,对吧,那么如果我获取一个不存在的下标,那么它会发生什么?

具体演示代码如下:

    @Test
    public void test() {

        //定一个数组并初始化
        int[] nums = {1, 2, 3};

        //获取下标为2的元素并打印。
        System.out.println("下标为2的元素为:" + nums[2]);

        //获取下标为5的元素并打印。
        System.out.println("下标为5的元素为:" + nums[5]);
    }

控制台打印截图:

         如上图截图所示,你们看到了什么?下标为2是正获取到了元素并正常打印,而对于一个下标不存在的获取,就发生了异常并抛出该异常: java.lang.ArrayIndexOutOfBoundsException: 5,这个5就是发生异常的原因,而对于java.lang.ArrayIndexOutOfBoundsException 这是异常类型。at 而这句 com.example.demo.java.ThrowableTest.test(ThrowableTest.java:33) 是告诉你具体哪一行发生异常,好让你能针对性的去排查异常并解决。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。