异常(Exception)

异常是什么

异常就是程序在进行时的不正常行为,就像之前数组时会遇到空指针异常(NullPointerException),数组越界异常(ArrayIndexOutOfBoundsException)等等。
在java中异常由类来表示。

异常的分类

异常有一个顶层类Throwable;
Throwable派生出两个子类Error,Exception;
Error指的是Java虚拟机无法解决的严重问题,例如递归时一直开辟栈,导致栈溢出的错误。
Exception也分为两种异常:编译时异常和运行时异常。

编译时异常,这种异常顾名思义是在编译时候就会发生,这种异常要在程序中捕获声明才能让程序通过。
例如在比较器文章这篇中要实现clone方法时要通过throws关键字声明CloneNotSupportedException异常才能正常使用。

运行时异常,这种异常全在(RunTimeException)这个类和其子类之下,编译通过,运行报错,这种异常可以交给JVM处理。

异常的处理方法

异常的处理一般使用throw、try、catch、finally、throws这五个关键字。

throw抛出异常

在程序执行时,该语句引发异常,此时就可以通过throw抛出异常来告诉程序员原因。
一般格式为throw new 异常类名("异常产生的原因"); 例如我们进行方法传参为数组时参数是null抛出空指针异常:

public void printArray(int[] array){if(null == array){throw new NullPointException("数组传参为空null");}else{//}
}

注意事项:
1.异常的抛出必须是在方法的内部
2.一旦异常抛出成功之后,在该语句之后的代码就不会执行了。就像上面写的else里面的语句不会执行了。
3.抛出的异常必须是Exception的或其子类,编译时异常必须在后续代码中处理,运行时异常可以交给JVM处理。

异常的声明

异常的声明就是告诉这个方法会报哪些异常,然后在这个方法内部不用对异常处理,让后面使用这个方法时对异常进行处理。
一般格式:

修饰符 返回值类型 方法名(参数表列) throws 异常类型1,异常类型2...{}

注意事项:
1.格式不能变,一定是将声明放在参数表列后面,可以多个异常同时声明
2.声明的异常必须是Exception的或其子类。如果声明的异常是具有父子类关系,只声明父类也可以

异常的捕获和处理

使用try-catch语句来对异常进行捕获和处理。
使用格式:

try{//会产生异常的代码
}catch(异常类型1 e){//对异常的处理代码
}catch(异常类型2 e){//对异常的处理代码
}

注意事项:
1.像前面一样如果try中抛出异常后还有代码就不会执行,
2.catch语句之间就像if-else语句一样,只会执行其中一个异常,
3.如果try中抛出异常被catch捕获并处理了那就会执行try-catch之后的语句,如果没有捕获到就不会执行
4.如果两个异常是父子类,一定要把子类异常catch放在前面
5.如果两个异常处理方式一样也可以用单竖杠 | 来处理catch(异常类型1 | 异常类型2 e){}但是这样就不知道具体是哪个异常了。

finally

这个语句是跟try-catch语句一起用的,这个语句的特点就是比catch先执行,里面常放一些资源关闭代码
格式:

try{//会产生异常的代码
}catch(异常类型1 e){//对异常的处理代码
}catch(异常类型2 e){//对异常的处理代码
}finally{//资源关闭代码
}

try 或者 catch 中如果有 return 会在这个 return 之前执行 finally. 但是如果
finally 中也存在 return 语句, 那么就会执行 finally 中的 return, 从而不会执行到 try 中原有的 return.

自定义异常类

异常本质就是一个类,然后继承于已有的异常类。在写自己的异常类时类名最后一个单词使用Exception更加规范
格式:

class NameException extends 异常类{//
}

自定义异常类时一般继承Exception 或 RunTimeException。
继承Exception默认是编译时异常,
继承RunTimeException是运行时异常,
在自定义异常类中一般会实现如下的一个构造方法,来报出什么原因导致异常:

public NameException(String message) {super(message);}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2013年 阿拉斯加巴罗活动层厚度和土壤含水量

Pre-ABoVE: Active Layer Thickness and Soil Water Content, Barrow, Alaska, 2013 ABoVE前:阿拉斯加巴罗活动层厚度和土壤含水量,2013年 简介 文件修订日期:2018-01-10 数据集版本:1 摘要 该数据集提供了 2013 年 8 月在…

Java | Leetcode Java题解之第142题环形链表II

题目: 题解: public class Solution {public ListNode detectCycle(ListNode head) {if (head null) {return null;}ListNode slow head, fast head;while (fast ! null) {slow slow.next;if (fast.next ! null) {fast fast.next.next;} else {ret…

网络安全难学吗?2024该怎么系统学习网络安全?

学习网络安全需要循序渐进,由浅入深。很多人对网络安全进行了解以后,就打算开始学习网络安全,但是又不知道怎么去系统的学习。 网络安全本身的知识不难,但需要学习的内容有很多,其中包括Linux、数据库、渗透测试、等保…

mysql中定时器的使用

在MySQL中,你可以使用事件调度器(Event Scheduler)来创建和管理定时器,这些定时器可以在指定的时间间隔或特定的时间自动执行事件。这些事件通常用于执行数据库维护任务,如定期备份、数据归档、清理旧数据等。 以下是…

linux-ubuntu20网卡驱动安装AX201

https://blog.csdn.net/vor234/article/details/131682778 联想拯救者Y7000P2023 Ubuntu20.04网卡驱动AX211安装 幻14 ubuntu20.04 AX210驱动安装 官网下载相应的驱动:https://www.intel.com/content/www/us/en/support/articles/000005511/wireless.html sudo a…

AI生成个性化壁纸

使用天工AI 将图片设置成桌面壁纸

vivado HW_ILA

HW_ILA 描述 集成逻辑分析器(ILA)调试核心允许您执行系统内监控 通过对内核上的调试探针,在实现的设计中对信号进行处理。您可以配置 ILA核心实时触发特定硬件事件,并在 以系统速度探测。 ILA调试核心可以通过从IP目录实例化ILA核…

【微信小程序】事件分类以及阻止事件冒泡

在微信小程序中,事件分为冒泡事件和非冒泡事件两大类,它们的区别在于事件是否能从原始触发组件开始,向父级组件传播(即“冒泡”)。 冒泡事件:当一个组件上的事件被触发后,不仅当前组件会接收到这…

stm32编写Modbus步骤

1. modbus协议简介: modbus协议基于rs485总线,采取一主多从的形式,主设备轮询各从设备信息,从设备不主动上报。 日常使用都是RTU模式,协议帧格式如下所示: 地址 功能码 寄存器地址 读取寄存器…

【数据结构(邓俊辉)学习笔记】图05——优先级搜索

文章目录 0. 概述1. BAG2. ADT 0. 概述 学习下优先级搜索 1. BAG 优先级搜索是非常广义的,概况来说,无论DFS 还是BFS从逻辑上来都属于这种搜索。 回忆下什么叫搜索或者遍历,对于像图这种数据结构里的元素逐一的没有重复的也没有遗漏的对它们…

360数字安全:2024年4月勒索软件流行态势分析报告

勒索软件传播至今,360 反勒索服务已累计接收到数万勒索软件感染求助。随着新型勒索软件的快速蔓延,企业数据泄露风险不断上升,勒索金额在数百万到近亿美元的勒索案件不断出现。勒索软件给企业和个人带来的影响范围越来越广,危害性…

基于微信小程序的智能校园导览系

基于微信小程序的智能校园导览系统 一、项目概述 背景: 随着高校信息化建设的推进,校园导览服务成为提升师生校园生活便利性的重要一环。 微信小程序因其轻量级、即用即走的特点,成为校园导览服务的理想选择。 目标: 开发一款功能全面、界面友好、操作简便的基于微信小…

第一百零二节 Java面向对象设计 - Java静态内部类

Java面向对象设计 - Java静态内部类 静态成员类不是内部类 在另一个类的主体中定义的成员类可以声明为静态。 例子 以下代码声明了顶级类A和静态成员类B: class A {// Static member classpublic static class B {// Body for class B goes here} }注意 静态成…

基于神经网络的股票K线数据预测未来涨幅

本文介绍了一种基于全连接神经网络(Fully Connected Network, FCN)的股票K线数据预测策略。具体步骤包括数据预处理、模型构建与训练、以及模型的验证和预测。 数据预处理 数据预处理是时间序列预测中的关键步骤。我们从历史K线数据中提取特征并生成标…

python实现将excel数据指保存到word表格中

准备一个excel表格 上代码: import openpyxl from docx import Document# 读取Excel文件 excel_file 大学名次.xlsx wb openpyxl.load_workbook(excel_file) ws wb.active# 获取Excel文件中的所有工作表名称 sheet_names wb.sheetnames# 遍历每个工作表&#x…

ipynb转markdown的简单方法

在线转换 推荐在线转换,拖进去后下载就行,简单易操作。 Convert Jupyter notebook to GitHub-Flavored Markdown for free on AlldocsThe free text converter for all your documents.https://alldocs.app/convert-jupyter-notebook-to-markdown vsc…

Web前端不挂科:深入探索与实战指南

Web前端不挂科:深入探索与实战指南 在数字化时代的浪潮中,Web前端开发已成为一项炙手可热的技能。然而,对于许多初学者来说,如何避免在Web前端课程中挂科却成为了一道难题。本文将从四个方面、五个方面、六个方面和七个方面&…

6_1 Linux 用户管理

6_1 Linux 用户管理 文章目录 6_1 Linux 用户管理[toc]1. 用户管理2. 组账户3. 本地账户数据文件4. 用户账号创建与删除5. 设置密码6. 用户初始配置文件7. 组账户管理8. 总结 1. 用户管理 用户管理的作用:可以登入操作系统;不同的用户有不同的权限唯一标…

设备安装施工的一点总结

下工厂安装了几百台设备,总结一点经验。 信号强度造成设备不稳定 设备是使用物联网卡的联网设备,以前一直用的是单天线(虽然设计上可以接四根天线),没发现什么问题,但是这一批硬件设计有改动,稳…

PyTorch 开发环境快速安装

PyTorch 开发环境快速安装包含三大步骤,具体如下: Anaconda 图文安装教程链接 # 安装时会自带 Python conda info # 使用该命令在终端验证是否安装成功CUDA 图文安装教程链接 nvcc -v # 使用该命令在终端验证是否安装成功PycharmPyTorch 图…