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

一、本期教学目标

  • 能够列举出常见的三个运行期的异常。
  • 能够使用try...catch、throws等关键字处理异常。
  • 能够自定义异常类。
  • 能够处理自定义异常类。

二、前言

        上一期我们是学习了异常相关的一些概念知识,然后演示了一下异常的触发及控制台异常的一些信息如何判断及如何定位异常发生代码行,对吧。今天我们就要来继续深入学习异常类,学习异常如何处理、自定义异常及处理自定义异常,非常的硬核,希望大家好好听。

三、正文

1.异常分类

说起异常,难道就一种吗?不不不,异常也是分类的,可大体分为以下两类:

  • 编译时异常:checked异常。表示在编译时期就会检查是否存在异常,如果没有对异常进行异常处理,则会编译失败。
  • 运行时异常:runtime异常。表示在运行时期检查是否存在异常,但在编译时期运行时异常是不会编译器检测到的,借此对于该异常是可以处理的。

如下是我给大家总结的一张异常分类流程图,帮助大家能更清晰的认识。

所以大家可能就会想一个问题了,如果程序出现异常,我们怎么办?有没有办法去对异常做一些处理,这是有的。一旦异常出现,我们就要对出现异常的代码进行修复。

2、异常处理

        对于异常处理,有如下五个关键字:try、catch、finally、throw、throws。这些我会一一给大家讲解的哈。我们先来学一个关键字--throw。

        在平时写代码时,我们必须要考虑到程序出现异常的情况,比如定义方法时,调用方法入参类型不对,那我们就应该抛出异常告知调用者,入参类型有误,请传递正确的入参类型。就好比这种情况,我们就应该抛出异常的方式来告知调用者。

        java就给我们提供了这么个关键字,throw,专门用于抛出异常对象。那么具体对于throw如何抛出一个异常对象?请继续往下看。

  1. 创建一个异常对象,可封装一些自定义的提示信息好告知调用者。
  2. 需要将异常对象反馈给调用者,具体怎么反馈呢?将这个异常对象传递到调用者处,并结束当前方法。

        如下是对于throw关键字的使用格式:

throw new 异常类名(参数);

我给大家列举几个例子,你们就会明白了。

throw new NullPointerException("要访问的arr数组不存在");
throw new ArrayIndexOutOfBoundsException("该索引在数组中不存在,已超出索引范围");

3、实例演示 

        如上我是已经教学了如何通过throw关键字来进行异常抛出,那么我们既然学习完抛出异常的格式后,我再通过下面程序演示下throw的具体使用。这也是边教学边实战。

    @Test
    public void test2() {

        //定义一个数组
        int[] arr = {1, 2, 3, 4};

        //根据数组角标获取元素。
        int index = 5;
        int value = this.getArrByIndex(arr, index);

        System.out.println(index + "角标值为:" + value);
    }

         如下是自定义异常抛出的具体使用。

    private int getArrByIndex(int[] arr, int index) {

        if (index < 0 || index > arr.length - 1) {
            throw new ArrayIndexOutOfBoundsException("该索引在数组中不存在,已超出角标范围");
        }

        return arr[index];
    }

        这里就需要大家注意,至于何时要异常抛出?你就可以这么理解,如果条件满足,当执行完throw抛出异常后,方法就已经终止运行了,这时也就结束了当前方法,并将异常返回给调用者。这时也就是我们通过throw关键字进行异常信息抛出。

大家可以看下上方示例的结果控制台展示:

         给大家解释一下,示例上的arr数组长度为4,下标范围为[0,3],而我获取arr[5],下标肯定是不存在的,所以肯定会进入异常判断,接着就执行throw语句,抛出异常信息。

4、总结 

        总而言之,如果程序出现了异常,我们就可以通过throw将异常抛出,也就是将问题返回给方法调用者。而对于调用者而言,该如何处理呢?其实呢调用者也是有多种选择,一它可以将异常捕获自己处理,二是它可以不管继续将异常抛出去,使用throws声明处理。不过这些我讲的目前你们可能不是能理解,我后续会讲到的,放心哈。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/508651.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【html威廉希尔体育体育羽毛球页面带注册】学生网页设计作业源码APP是不是真的?

Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 校园篮球网页设计 | 足球体育运动 | 体育游泳运动 | 兵乓球 | 网球 | 等网站的设计与制作 | HTML期末大学生网页设计作业 HTML&#xff1a;结构CSS&#xff1a;样式 在操作方面…

中断服务程序模板

通常定时器初始化过程如下: ①对 TMOD赋值,以确定TO和T1的工作方式。 ②计算初值,并将初值写入THO、TLO或TH1、TL1。 ③中断方式时&#xff0c;则对IE赋值&#xff0c;开放中断。 ④使TRO或TR1置位&#xff0c;启动定时器/计数器定时或计数。 代码 利用定时器0工作方式1&…

Vision-Language Models for Vision Tasks: A Survey

论文地址&#xff1a;https://arxiv.org/pdf/2304.00685.pdf 项目地址&#xff1a;https://github.com/jingyi0000/VLM_survey 一、综述动机 视觉语言模型&#xff0c;如CLIP&#xff0c;以其独特的训练方式显著简化了视觉识别任务的流程。它减少了对大量精细标注数据的依赖&a…

【Python刷题】将有序数组转换为二叉搜索树

问题描述 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 平衡 二叉搜索树。 高度平衡的意思是&#xff1a;二叉树是一颗满足“每个结点的左右两个子树的高度差的绝对值不超过1”的二叉树。 示例 1&#xff1a; 输入&#xf…

012——LED模块驱动开发(基于I.MX6uLL)

目录 一、 硬件原理图 二、 驱动程序 三、 应用程序 四、 Makefile 五、操作 一、 硬件原理图 又是非常经典的点灯环节 &#xff0c;每次学新语言第一步都是hello world&#xff0c;拿到新板子或者学习新的操作系统&#xff0c;第一步就是点灯。 LED 的驱动方式&#xff0…

3.26号arm

1. SPI相关理论 1.1 概述 spi是一种同步全双工串行总线&#xff0c;全称串行外围设备接口 通常SPI通过4个引脚与外部器件相连&#xff1a; MISO&#xff1a;主设备输入/从设备输出引脚。该引脚在从模式下发送数据&#xff0c;在主模式下接收数据。 MOSI&#xff1a;主设备输…

ZKFair 创新之旅,新阶段如何塑造财富前景

在当前区块链技术的发展中&#xff0c;Layer 2&#xff08;L2&#xff09;解决方案已成为提高区块链扩容性、降低交易成本和提升交易速度的关键技术&#xff0c;但它仍面临一些关键问题和挑战&#xff0c;例如用户体验的改进、跨链互操作性、安全性以及去中心化程度。在这些背景…

如何让光猫4个网口都有网络

一般情况光猫只有LAN1口有网络&#xff0c;LAN2、LAN3和LAN4口都是预留给电视用的&#xff0c;那么如何让这3个网口也有网络呢&#xff1f; 使用场景&#xff1a; 光猫在弱电箱内&#xff0c;弱电箱中有三根网线&#xff08;网线1、网线2和网线3&#xff09;分别接入到了三个房…

Day60:WEB攻防-XMLXXE安全无回显方案OOB盲注DTD外部实体黑白盒挖掘

目录 XML&XXE-传输-原理&探针&利用&玩法 XXE 黑盒发现 XXE 白盒发现 XXE修复防御方案 有回显 无回显 XML&XXE-黑盒-JSON&黑盒测试&类型修改 XML&XXE-白盒-CMS&PHPSHE&无回显 知识点&#xff1a; 1、XXE&XML-原理-用途&…

【滑动窗口】Leetcode 串联所有单词的子串

题目解析 30. 串联所有单词的子串 本题的意思就是在目标串s中寻找能够找到的words字符串的全排列&#xff0c;返回起始位置 算法讲解 我们可以将这道题转化为寻找目标串的words字母的异位词&#xff0c;按照上一次讲解的【滑动窗口】Leetcode 找到字符串中所有字母异位词我们…

ssm015基于java的健身房管理系统的设计与实现+vue

健身房管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本健身房管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间…

【目标检测】YOLOv6 的网络结构,图解RepBlock重参数化

YOLOv6 是美团推出的&#xff0c;在这个版本里面&#xff0c;不再使用之前 YOLOv4 和 YOLOv5 的带 CSP 结构的 CSPDarknet-53 作为 backbone 了&#xff0c;而是在 RepVGG 的启发下&#xff0c;推出了新的 EfficientRep 作为 YOLOv6 的 backbone。 RepVGG 最重要的一点是&…

【操作系统】FCFS、SJF、HRRN、RR、EDF、LLF调度算法及python实现代码

文章目录 一、先来先服务调度算法&#xff08;FCFS&#xff09; 二、短作业优先调度算法&#xff08;SJF&#xff09; 三、高响应比优先调度算法&#xff08;HRRN&#xff09; 四、轮转调度算法&#xff08;RR&#xff09; 五、最早截至时间优先算法&#xff08;EDF&#…

单V及多V感知在自动驾驶在恶劣环境条件下的感知提升方案

单V及多V感知在自动驾驶在恶劣环境条件下的感知提升方案 附赠自动驾驶学习资料和量产经验&#xff1a;链接 自动驾驶中的视觉感知是车辆在不同交通条件下安全、可持续地行驶的关键部分。然而&#xff0c;在大雨和雾霾等恶劣天气下&#xff0c;视觉感知性能受到多种降级效应的极…

EasyCVR视频汇聚平台海康Ehome2.0与5.0设备接入时的配置区别

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

excel中文本列显示e+17这样的科学计数法如何处理

我的excel中文本列显示e17这样的科学计数法 然后右键&#xff0c;设置单元格格式&#xff0c;为特殊&#xff0c;邮政编码&#xff0c;点确定即可 最后效果如下

JavaScript_与html结合方式

JavaScript_语法 ECMAScript&#xff1a;客户端脚本语言的标准 1.基本语法 1.1 与html结合方式&#xff08;2种&#xff09; 1. 内部JS 定义<script>,标签体内容就是js代码 2. 外部JS 定义<script>,通过src属性引入外部的 js文件 注意&#xff1a; 1.<script>…

Html提高——视频标签音频标签及其相关属性

HTML5 在不使用插件的情况下&#xff0c;也可以原生的支持音视频格式文件的播放&#xff0c;当然&#xff0c;支持的格式是有限的。 1、video标签 1.1、video标签的语法 <video src"文件地址" controls"controls"></video> video标签的内部…

maven-下载慢问题

1、使用统一的maven组件&#xff0c;将maven安装到系统中&#xff0c;maven安装请自行百度 2、idea中配置如图 3、编辑settings.xml&#xff0c;直接将下面代码粘贴进去即可&#xff0c;原理是换到阿里服务器 <?xml version"1.0" encoding"UTF-8"?&…

C++取经之路(其三)——内联函数,auto关键字

目录 内联函数&#xff1a; 内联函数注意点&#xff1a; auto&#xff1a; atto注意点&#xff1a; 内联函数&#xff1a; 概念&#xff1a; 以inline修饰的函数叫做内联函数&#xff0c;编译时C编译器会在调用内联函数的地方展开&#xff0c;没有函数调 用建立栈帧的开销…