认识JAVA中的异常

目录:
一. 异常概念与体系结构
二. 异常的处理
三. 自定义异常类
一. 异常概念与体系结构:
1 异常的概念:在 Java 中,将程序执行过程中发生的 不正常行为 称为异常,
如:算数异常ArithmeticException
System.out.println(10 / 0);
// 执行结果
Exception in thread "main" java.lang.ArithmeticException: / by zero

数组越界异常:ArrayIndexOutOfBoundsException

int[] arr = {1, 2, 3};
System.out.println(arr[100]);
// 执行结果
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 100
空指针异常: NullPointerException
int[] arr = null;
System.out.println(arr.length);
// 执行结果
Exception in thread "main" java.lang.NullPointerException

2.异常的体系结构:异常种类繁多,为了对不同异常或者错误进行很好的分类管理, Java 内部维护了一个 异常的体系结构 如图:
从图中可以看出:
(1).Throwable 是异常体系的顶层类,其派生出两个重要的子类, Error Exception
(2). Error指的是Java虚拟机无法解决的严重问题,比如:JVM的内部错误、资源耗尽等,典型代表: StackOverflowErrorOutOfMemoryError,一旦发生回力乏术。
(3).Exception 异常产生后程序员可以通过代码进行处理,使程序继续执行。比如:感冒、发烧。我们平时所说的异常就是Exception。
OutOfMemoryError为内存泄漏 :程序中存在未释放的内存资源,导致内存占用不断增加,最终导致内存不足等等
StackOverflowError为:无限递归下去导致超出栈的容量等等
3. 异常的分类:分为 编译时异常,  运行时异常。
(1). 编译时异常:  在程序 编译期间 发生的异常,称为 编译时异常 ,也称为 受检查异常
如图:这个重写,克隆方法的拷贝,没有对其捕获或声明
下图则是声明: 就编译通过
2. 运行时异常:
(1) 在程序 执行期间 发生的异常,称为运行时异常,也称为 非受检查异常

(2)RunTimeException以及其子类对应的异常,都称为运行时异常

比如NullPointerException、ArrayIndexOutOfBoundsException、ArithmeticException

注意:编译时出现的语法性错误,不能称之为异常。例如将 System.out.println 拼写错了, 写成了
这里也用克隆举例子,这里没有实现克隆接口,却编译通过了!!!
但是运行会有异常:这就是非受查异常
二. 异常的处理:
在Java中, 异常处理主要的 5 个关键字: throw try catch final throws 。用好他们就,可以很好的处理异常了。
1. 异常的抛出 :在Java中,可以借助throw关键字,抛出一个指定的异常对象,将错误信息告知给调用者
注意:
(1). throw必须写在方法体内部
(2). 抛出的对象必须是Exception 或者 Exception 的子类对象
(3). 如果抛出的是 RunTimeException 或者 RunTimeException 的子类,则可以不用处理,直接交给JVM来处理
(4). 如果抛出的是编译时异常,用户必须处理,否则无法通过编译
(5). 异常一旦抛出, 其后 的代码就不会执行。
如图:这里还用了,try处理catch捕捉
public static void main(String[] args)throws ArrayIndexOutOfBoundsException {int[] array = new int[2];//捕捉异常try {//放可能发生的异常System.out.println(array[3]);System.out.println("这里不会再执行了");}catch (ArrayIndexOutOfBoundsException e) {//捕捉异常System.out.println("处理了ArrayIndexOutOfBoundsException异常");//捕捉,打印异常e.printStackTrace();}}

2.异常的捕获:异常的捕获,也就是异常的具体处理方式,主要有两种: 异常声明throws 以及 try-catch捕获处理。
抛出异常:
public static void OpenConfig(String filename) throws FileNotFoundException {if (filename.equals("config.ini")) {throw new FileNotFoundException("配置文件名字不对");}}

3.try-catch 捕获并处理 throws对异常并没有真正处理,而是将异常报告给抛出异常方法的调用者,由调用者处理。如果真正要对异常进行处理,就需要try-catch。)
此时声明一下,然后捕获:( 直接声明不捕获也可以
class Exception {File file;/*FileNotFoundException : 编译时异常,表明文件不存在此处不处理,也没有能力处理,应该将错误信息报告给调用者,让调用者检查文件名字是否给错误了*/public static void OpenConfig(String filename) throws FileNotFoundException {if (filename.equals("config.ini")) {throw new FileNotFoundException("配置文件名字不对");}}//捕获public static void main(String[] args) {try {//将可能出现异常的代码放在这里OpenConfig("test");} catch (FileNotFoundException e) {// 如果try中的代码抛出异常了,此处catch捕获时异常类型与try中抛出的异常类型一致时,或者是try中抛出异常的基就会时,就会被捕获到e.printStackTrace();}finally {// 此处代码一定会被执行到,一般用来关闭文件,释放资源}}
}
注意:1.try块内抛出异常位置之后的代码将不会被执行。
2. 如果 抛出异常类型与catch时异常类型不匹配 ,即异常不会被成功捕获,也就不会被处理,继续往外抛 ,直到 JVM收到后中断程序。 (一般写法是,用父类异常在最后面兜底)

4.finally:
在写程序时, 有些特定的代码,不论程序是否发生异常,都需要执行,比如程序中打开的资源 :网络连接、数据库连接、IO 流等, 在程序正常或者异常退出时,必须要对资源进进行回收 。另外,因为 异常会引发程序的跳转,可能导致有些语句执行不到 finally 就是用来解决这个问题的。
还有 finally 中的代码一定会执行的,一般在 finally 中进行一些资源清理的扫尾工作
语法格式:
try{
// 可能会发生异常的代码
}catch(异常类型 e){
// 对捕获到的异常进行处理
}finally{
// 此处的语句无论是否发生异常,都会被执行到
}
// 如果没有抛出异常,或者异常被捕获处理了,这里的代码也会执行

(补充)异常的处理流程: 如果本方法中没有合适的处理异常的方式, 就会沿着调用栈向上传递 方法1--》方法2--》方法3---》main方法----》jvm)
三. 自定义异常类:
Java 中虽然已经内置了丰富的异常类, 但是并不能完全表示实际开发中所遇到的一些异常,此时就需要维护符合我们实际情况的异常结构.就需要自定义异常
例如, 我们实现一个用户登陆功能:
根据业务此时我们在处理用户名密码错误的时候可能就需要抛出两种异常
注意:
1.自定义异常类,然后继承自Exception 或者 RunTimeException
2. 实现一个带有String类型参数的构造方法,参数含义:出现异常的原因
业务代码:
class login {private String userName;private String passWord;public  void loginFo(String userName, String passWord)throws UserException,PassWardException{if (!this.userName.equals(userName)) {throw new UserException("抛出自定义,的用户名错误异常");}if (!this.passWord.equals(passWord)) {throw new PassWardException("抛出密码自定义,的用密码错误异常");}System.out.println("登录成功!");}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getPassWord() {return passWord;}public void setPassWord(String passWord) {this.passWord = passWord;}
}public class TestException {public static void main(String[] args) throws UserException {login login = new login();login.setPassWord("321");login.setUserName("haha");login.loginFo("haha", "323");/*try {login.loginFo("haha", "323");}catch (UserException e) {e.printStackTrace();}catch (PassWardException e) {e.printStackTrace();}finally {}*/}
}

                       

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

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

相关文章

大豆、棉花深度学习数据集大合集

最近收集了一大波关于大豆和棉花的深度学习数据集,主要有叶片的识别、分类、计数以及病害检测等。 数据集的价值 科研价值:这些数据集为植物学、农业信息技术、机器学习等领域的科研人员提供了宝贵的资源。它们可以用于训练和优化各种深度学习模型&…

CCF CAT- 全国算法精英大赛(2024第二场)往届真题练习 4 | 珂学家

前言 餐馆 思路:可撤销的0-1背包 考察了多个知识点,包括 差分技巧离线思路0-1背包 不过这题卡语言,尤其卡python import java.io.*; import java.util.*; import java.util.stream.Collectors; import java.util.stream.IntStream;public…

C#开发的应用升级更新服务器端工具 - 开源研究系列文章 - 个人小作品

笔者开发过一些小应用,然后这些应用就需要有升级更新的功能,但是如果每个都集成进去也行,但是就是得写死更新的代码了。于是就想写一个应用升级更新的管理器,以前看到过Github上有一个AutoUpdate.Net,不过它那个要集成…

2024最新VMware Workstation Pro下载教程

自从2024年5月份之后,VMware workstation player就不能直接在vm官网下载,需要到broadcom博通网站上下载 下面介绍最新下载步骤: 百度直接搜索vmware 进入官网点击Workstation Pro链接 博通注册对应的账号 现在下载都需到博通注册对应的账号 登录邮…

展台设计需要注意哪些问题

一、明确设计目标与主题 在设计之前需要明确展台设计目标和主题。设计目标是指展台设计所要达到的目的和效果,提高企业知名度、促进产品销售等;设计主题则是展台设计的核心和灵魂,贯穿整个展台设计的风格和形式。参展企业需要清晰地界定设计目…

Linux常用环境Docker安装

一、mysql安装 简单安装 docker run -d \--name mysql \-p 3306:3306 \-e TZAsia/Shanghai \-e MYSQL_ROOT_PASSWORD123 \mysql mysql容器本地挂载 cd /usr mkdir mysql cd mysql/ mkdir data mkdir conf mkdir init可以手动导入自己的数据库信息 docker run -d \--name mys…

@Transactional事务注解内含乾坤?

文章目录 前置知识实战1、无事务操作2、事务操作 总结 前置知识 MyBatis中的工作原理 读取配置文件:数据库连接信息、事务管理信息以及映射文件的位置加载映射文件:加载Mapper.xml这些映射文件,解析其中的 SQL 语句和结果映射信息创建 SqlS…

如何在Windows 10上的命令提示符下更改目录?这里提供方法

如果你刚开始在Windows 10上使用命令提示符,你需要知道如何更改目录。 如何在Windows上打开命令提示符 随着你对Windows 10上的命令提示符越来越熟悉,你需要学习的第一件事是如何更改操作系统文件系统中的目录。有几种方法可以做到这一点,所以我们将带你了解它们。 注意:…

JCR一区级 | Matlab实现TCN-LSTM-MATT时间卷积长短期记忆神经网络多特征分类预测

JCR一区级 | Matlab实现TCN-LSTM-MATT时间卷积长短期记忆神经网络多特征分类预测 目录 JCR一区级 | Matlab实现TCN-LSTM-MATT时间卷积长短期记忆神经网络多特征分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.JCR一区级 | Matlab实现TCN-LSTM-MATT时间卷积长短…

问界新M7 Ultra仅售28.98万元起,上市即交付

5月31日,问界新M7 Ultra正式上市。发布会上,鸿蒙智行旗下多款产品交出最新答卷——问界新M5上市1个月大定突破2万台;智界S7位列30万纯电轿车4月交付量NO.3;问界M9上市5个月大定突破9万台。其中,作为中国高端豪华SUV市场…

STM32CubeMX重新生成代码时如何避免用户代码被覆盖

STM32CubeMX对于在STM32芯片上开发程序非常方便,但是有时发现:使用STM32CubeMX生成keil工程后,在这个工程上开发了一段时间,然后又有外设需要配置,这时使用STM32CubeMX打开MX工程开启外设,最后重新生成keil…

项目启动 | 宏昌电器牵手盘古信息,数字化制造引领企业高质量发展

随着时代的发展,数字化转型已成为实现企业持续增长和塑造竞争优势不可或缺的关键因素。浙江宏昌电器科技股份有限公司(以下简称为“宏昌电器”)围绕企业战略发展需求,积极加速数字化转型升级进程,以数字化力量推动公司…

docker-compose jira、bugzilla

一、jira 同这篇文章: linux docker 部署破解版本jira:8.4.0——测试体验(非商用)_jira docker-CSDN博客 直到构建完破解版本的镜像就可以了~ 二、bugzilla 1. 拉取镜像: 官网镜像搜索bugzilla,第一个就是: 直接…

基于51单片机的电子时钟设计

在单片机技术日趋成熟的今天,其灵活的硬件电路和软件电路的设计,让单片机得到广泛的应用,几乎是从小的电子产品,到大的工业控制,单片机都起到了举足轻重的作用。单片机小的系统结构几乎是所有具有可编程硬件的一个缩影…

计算机图形学入门04:视图变换

1.MVP变换 将虚拟场景中的模型投影到屏幕上,也就是二维平面上,需要分三个变换。 1.首先需要知道模型的位置,也就是前面提到的基本变换,像缩放、平移,旋转,也称为模型(Model)变换。 2.然后需要知道从…

归并排序C++代码详解,思路流程+代码注释,带你完全学会归并排序

归并排序 归并排序是一种经典的排序算法,属于分治算法的一种。其核心思想是将一个大问题分解成若干个较小的子问题来解决,然后根据子问题的解构建原问题的解。在排序问题中,归并排序将数组分成两半,分别对这两半进行排序&#xf…

车载软件架构 - AP AUTOSAR 设计思想及原理

车载软件架构 - AP AUTOSAR 设计思想及原理 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消…

物联网实战--平台篇之(十一)设备管理后台

目录 一、设备数据库 二、添加设备 三、排序设备 四、重命名设备 五、删除设备 六、移动设备 本项目的交流QQ群:701889554 物联网实战--入门篇https://blog.csdn.net/ypp240124016/category_12609773.html 物联网实战--驱动篇https://blog.csdn.net/ypp240124016/categ…

港科夜闻 | 香港科大于首尔高峰论坛分享三十载发展里程,并与韩国知名机构学府加强交流...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大于首尔高峰论坛分享三十载发展里程,并与韩国知名机构学府加强交流。香港科大致力加强与韩国机构和产业的联系,大学高层管理人员于5月29-30日出席首尔一个备受瞩目的论坛,并与当…

Codeforces Round 949 (Div. 2 ABCD) 视频讲解

A. Turtle and Piggy Are Playing a Game Problem Statement Turtle and Piggy are playing a number game. First, Turtle will choose an integer x x x, such that l ≤ x ≤ r l \le x \le r l≤x≤r, where l , r l, r l,r are given. It’s also guaranteed that …