【Java】异常处理 —— Throwable 及其应用

通过一张图来展示Throwable类的继承体系,如图2所示。

图2 Throwable异常体系结构图

● Error类称为错误类,它表示Java运行时产生的系统内部错误或资源耗尽的错误,是比较严重的,仅靠修改程序本身是不能恢复执行的,例如系统崩溃,虚拟机错误等。

● Exception类称为异常类,它表示程序本身可以处理的错误。在Java程序开发中进行的异常处理,都是针对Excption类及其子类的。在Exception类的众多子类中有一个特殊的RuntimeException类,该类及其子类用于表示运行时异常。除了此类,Exception类下所有其他的子类都用于表示编译时异常。

表1 Throwable常用方法

方法声明

功能描述

String getMessage()

返回此throwable的详细消息字符串

void printStackTrace()

将此throwable及其追踪输出至标准错误流

void printStackTrace(PrintStream s)

将此throwable及其追踪输出到指定的输出流

异常的类型

处理编译时异常有两种方式,具体如下:

● 使用try…catch语句对异常进行捕获处理;

● 使用throws关键字声明抛出异常,让调用者对其处理。

1.编译时异常

在Exception的子类中,除了RuntimeException类及其子类外,其他子类都是编译时异常。

2.运行时异常

RuntimeException类及其子类都是运行时异常。

表1 常见运行时异常

异常类名称

异常类说明

ArithmeticException,

算术异常

IndexOutOfBoundsException

角标越界异常

ClassCastException

类型转换异常

NullPointerException

空指针异常

NumberFormatException

数字格式化异常

try...catch和finally

ry{}代码块中包含的是可能发生异常的语句,catch(){}代码块中编写针对捕获的异常进行处理的代码。

需要注意的是,在try{}代码块中,发生异常语句后面的代码是不会被执行的。

有时候会希望有些语句无论程序是否发生异常都要执行,这时就可以在try…catch语句后,加一个finally{}代码块。

throws关键字

在前面章节案例中,定义除法运算时,开发者通常会意识到可能出现的异常,可以直接通过try...catch对异常进行捕获处理,但有些时候,方法中代码是否会出现异常,开发者并不明确或者并不急于处理,为此,Java允许将这种异常从当前方法中抛出,然后让后续的调用者在使用时再进行异常处理。

throw关键字

与throws有所不同的是,throw用于方法体内,并且抛出的是一个异常类对象,而throws关键字用在方法声明中,用来指明方法可能抛出的多个异常。

通过throw关键字抛出异常后,还需要使用throws关键字或try…catch对异常进行处理。需要注意的是,如果throw抛出的是Error、RuntimeException或它们的子类异常对象,则无需使用throws关键字或try…catch对异常进行处理。

自定义异常

    // 下面的代码是自定义一个异常类继承自Exceptionpublic class DivideByMinusException extends Exception{public DivideByMinusException (){super();          // 调用Exception无参的构造方法}public DivideByMinusException (String message){super(message); // 调用Exception有参的构造方法}}
    public class Example36 {// 下面的方法实现了两个整数相除,public static int divide(int x,int y) throws DivideByMinusException {if (y == 0) {// 使用throw关键字声明异常对象throw new DivideByMinusException("除数是0");}int result = x / y; // 定义一个变量result记录两个数相除的结果return result;       // 将结果返回}public static void main(String[] args) {try {int result = divide(4, 0);System.out.println(result);} catch (DivideByMinusException e) {System.out.println("捕获的异常信息为:" + e.getMessage());}}}

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

3D建模软件 | Blender v4.2.2 绿色版

Blender是一款功能强大的免费开源3D创作套件,适用于创建3D可视化效果,如静态图像、3D动画、视觉特效以及视频编辑。Blender以其跨平台兼容性、高效内存管理、统一的工作流程和活跃的社区支持而受到独立艺术家和小型工作室的青睐。 它提供了从建模、渲染…

Ubuntu下安装向日葵:闪退

下载 https://sunlogin.oray.com/download 初次安装 $ sudo dpkg -i SunloginClient_15.2.0.63064_amd64.deb 正在选中未选择的软件包 sunloginclient。 (正在读取数据库 ... 系统当前共安装有 234281 个文件和目录。) 准备解压 SunloginClient_15.2.0.63064_amd64.deb ..…

使用bat命令在没有java的环境下启动jar包

使用bat命令在没有java的环境下启动jar包 先看一下目录下面的文件 里面有三个比较重要的文件 clean.bat:用于清除占用程序的端口 一键启动_x64.bat:用于启动全部的项目 jre8_win64:用于jar所需要的java环境 注意事项: 关于jar…

MySQL 中优化 COUNT()查询的实用指南

在 MySQL 数据库的使用中,我们经常会用到 COUNT()函数来统计行数或满足特定条件的行数。然而,在处理大规模数据时,COUNT()查询可能会变得非常缓慢,影响数据库的性能。那么,如何在 MySQL 中优化 COUNT()查询呢&#xff…

Redis一些简单通用命令和认识常用数据类型和编码方式

通用命令 get() / set() 这是Redis中两个最为核心的命令。 set插入 这里的key 和 value都是字符串,我们可以加双引号 或者单引号,或者不加。 get查找 如果查询的key值不存在,那么会返回一个 nil ,也就是代表空 在Redis中命令…

【C++位图】构建灵活的空间效率工具

目录 位图位图的基本概念如何用位图表示数据位图的基本操作setresettest 封装位图的设计 总结 在计算机科学中,位图(Bitmap)是一种高效的空间管理数据结构,广泛应用于各种场景,如集合操作、图像处理和资源管理。与传统…

什么是开放式耳机?具有什么特色?非常值得入手的蓝牙耳机推荐

开放式耳机是当下较为热门的一种耳机类型。它具有以下特点: 设计结构: 呈现开放式的构造,不会完全堵住耳道。如此一来,外界声音能够较容易地被使用者听到,在使用耳机时可以保持对周围环境的察觉。比如在户外&#xf…

绿色新纪元:光伏技术飞跃与能源体系重塑

近年来,光伏电池技术取得了突破性进展。新型高效光伏材料如钙钛矿、有机光伏等不断涌现,这些材料在转换效率和稳定性上均表现出色,为光伏产业注入了新的活力。同时,光伏组件的智能化、轻量化设计也日益成为趋势,使得光…

Go基础学习06-Golang标准库container/list(双向链表)深入讲解;延迟初始化技术;Element;List;Ring

基础介绍 单向链表中的每个节点包含数据和指向下一个节点的指针。其特点是每个节点只知道下一个节点的位置,使得数据只能单向遍历。 示意图如下: 双向链表中的每个节点都包含指向前一个节点和后一个节点的指针。这使得在双向链表中可以从前向后或从后…

403高效绕过目录扫描工具

403高效绕过目录扫描工具 简介 在安全测试中,安全测试人员信息收集时可使用此工具来进行目录枚举,目录进行指纹识别,枚举出来的403状态目录可尝试进行绕过,绕过403有可能获取管理员权限,不影响dirsearch原本功能使用。…

提升效率,C4D云渲染教程来了

因为C4D主要搭配的渲染器OCtane和Redshift都是GPU渲染器,阿诺德渲染器也可能直接用GPU渲染,所以大部分C4D渲染农场都支持用RTX2080、3090、4090系列显卡云渲染,云渲染追求速度,分机渲染任务,比如分100台机器渲染一个相…

wireshark1

注意看title,管理员的密码即为答案,那么咱们就直接去过找POST请求的数据包就可以了 找到flag,游戏结束~

TOGAF®架构开发方法:构建数字化转型新时代的正式权威指南

The Open Group与AZone权威出品,值得信赖 《TOGAF架构开发方法》培训课程(点击即可学习) 全球最具影响力的数字化转型架构出品方The Open Group 专注于企业架构师职业发展的平台AZone联合推出 The Open Group:行业领导者的信赖…

每日OJ题_牛客_NC40链表相加(二)_链表+高精度加法_C++_Java

目录 牛客_NC40链表相加(二)_链表高精度加法 题目解析 C代码 Java代码 牛客_NC40链表相加(二)_链表高精度加法 链表相加(二)_牛客题霸_牛客网 题目解析 模拟⾼精度加法的过程,只不过是在链表中模拟。 C代码 /*…

FreeRTOS(四)FreeRTOS列表与列表项

目录 列表 列表项 迷你列表项 列表和列表项的关系 列表相关API函数 列表初始化 列表项初始化 列表项插入 列表项末尾插入 列表项删除 列表遍历 在 FreeRTOS 中,列表(List)和列表项(ListItem)是核心数据结构&…

linux内核双向链表使用list klist

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、list和klist是什么?二、代码示例1.list2.klist 总结 前言 提示:这里可以添加本文要记录的大概内容: linux内核中大量使…

上市一周暴涨20%,美的的出海之路开了个好头

“宁可走错一步,也不能走错半步”,这是美的集团创始人何享健的名言,也代表着美的集团在扩张方面长期以来一贯的风格:稳健。 映射在当下,就是当老对手海尔智家于2020年率先登陆港交所,国际化策略初显成效以…

JavaWeb 13.HTTP协议

和自己的情绪共处,永远保持乐观 —— 24.9.26 一、HTTP简介 HTTP 超文本传输协议 (HTTP-Hyper Text transfer protocol),是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出&a…

考研数据结构——C语言实现归并排序

包含头文件:程序首先包含了标准输入输出库stdio.h,以便使用printf等函数进行输入输出操作。 定义数组和数组大小:定义了一个宏N,其值为5,表示数组q的长度。数组q被初始化为{5, 3, 8, 4, 2},这是我们要排序…

BFS 解决 FloodFill 算法

BFS 解决 FloodFill 算法 题目一: 图像渲染1. 题⽬链接:2. 题⽬描述:3. 算法思路:4.代码 题目二: 岛屿数量1. 题⽬链接:2. 题⽬描述:3. 算法思路:4.代码 题目三:被围绕的…