Java 异常

article/2025/6/14 16:21:45

文章目录

  • 异常
    • 异常和错误
  • 异常的处理
    • JVM处理异常和自己处理异常
    • finally
    • 面试题
    • 异常的处理流程
  • 自定义异常类

在这里插入图片描述

异常

  1. 异常:将程序执行过程中发生的不正常行为,异常也是一个类
  2. 程序出现异常后将不会继续执行
  3. 异常的分类:算术异常,空指针异常,数组越界异常

算术异常

在这里插入图片描述
空指针异常
在这里插入图片描述
数组越界异常
在这里插入图片描述

异常和错误

在这里插入图片描述

  1. 异常到底有多少个?它们之间的关系是什么?

异常分为运行时异常和编译时异常

运行时异常(非受查异常):运行时才能检测出来

编译时异常(受查异常):没进行运行前就能检测出来,比如clone(深浅拷贝)

在这里插入图片描述
在这里插入图片描述
2. RunTimeException以及其子类对应的异常都是运行时异常

异常的处理

  1. Java中用的是try catch来捕获异常

在这里插入图片描述
2. 如何让程序抛出异常?
抛出异常的方式有很多种:

  1. 某段程序触发(JVM抛出)

  2. 通过关键字throw抛出异常(手动抛出)

throw

在这里插入图片描述
throws,异常的声明,后面可以跟多个异常,用逗号隔开
如果在方法内出现了编译时异常,在方法的声明后面声明这个异常就不会报错,最后这个异常是交给JVM处理的

在这里插入图片描述
在这里插入图片描述
3. throws的处理逻辑:

在这里插入图片描述
4. 调用抛出异常的方法时,调用者必须对该异常进行处理,或者继续使用throws抛出,下图中这种异常是交给JVM处理的

在这里插入图片描述
5. 程序员自己处理的异常
在这里插入图片描述

JVM处理异常和自己处理异常

  1. 一旦交给JVM处理,程序就会到对应的异常处终止异常

  2. 自己用try catch捕获异常,并且捕获多个异常
    在这里插入图片描述
    在这里插入图片描述

  3. 捕获多个异常,虽然可以捕获多个异常,但是同一时刻只能抛出一个异常

  4. 多个异常的处理方式完全相同可以使用以下方式捕获

在这里插入图片描述
5. 父类的异常和子类的异常同时存在,可以用一个Exception捕获所有的异常(但是不推荐这样做)

在这里插入图片描述

  1. 此时是可以的子类捕获不到的异常,用父类来捕获

在这里插入图片描述
在这里插入图片描述

  1. 未正确捕获异常,直接报错

在这里插入图片描述
8. 正确捕获异常后不会影响后续代码的执行

在这里插入图片描述

finally

  1. 无论是否发生异常,finally都将被执行
public class test {public static void main(String[] args) {try{int[] array = {1,2,3};System.out.println(array[3]);}catch(ArrayIndexOutOfBoundsException e){e.printStackTrace();// 打印栈的痕迹}finally{System.out.println("111");}System.out.println("后续代码");}
}
  1. finally一定会被执行,finally中的代码会在return之前执行

在这里插入图片描述

  1. finally用来释放资源,Scanner也是一种资源,使用完之后需要close该资源,放在try括号中就不需要手动关闭了,可以把需要关闭的资源写在try的括号中

在这里插入图片描述
在这里插入图片描述

  1. 为什么一定要使用finally,在finally内部进行释放资源呢?
    如果是try中有return的话,不使用finally就会造成资源泄露,关闭资源写在finally之外

面试题

  1. throw和throws有什么区别?

throw是用来抛出异常的,throws是用来声明异常的,出现编译时异常,用throws来声明就不会报错了,但是是没有处理这个异常的

  1. finally中的语句一定会被执行吗?
    是的,一定会被执行

异常的处理流程

  1. 异常会沿着调用栈向上传递,比如func方法中出现了异常,那么调用它的main方法中可以写处理异常的逻辑,也可以在func方法中处理异常,如果没有处理就在func方法后面声明这个异常

在这里插入图片描述
2. 总结
在这里插入图片描述

自定义异常类

  1. 如果要写一个自定义异常,一定要继承一个异常,并且自定义异常都是继承Exception或者是RunTimeException的
    extends Exception 编译时异常(受查异常)
    extends RuntimeException 运行时异常(非受查异常)

  2. 例子:用户名和密码的登录

public class Test {private String userId = "一";private String  password = "010101";public void login(String userId,String password) {if(!this.userId.equals(userId)){System.out.println("用户名错误");}if(!this.password.equals(password)){System.out.println("密码错误");}System.out.println("登录成功");}public static void main(String[] args) {Test test = new Test();test.login("一","010101");}
}

上面密码和用户名都是正确的,不会抛出异常
用户名或者密码错误会抛出异常,需要写自定义异常,继承自Exception或者是RunTimeException

自定义异常类

//继承基类异常
//用户名异常
//这里继承的是受查异常
// 用户名异常
class UserIdException extends Exception{public UserIdException(String message){super(message);}
}
//密码异常
class PasswordException extends Exception{public PasswordException(String message){super(message);}
}

如果用户名或者密码不正确就会报出异常,在main方法中或者是login方法中捕获异常

class UserIdException extends Exception{public UserIdException(String message){super(message);}
}
class PasswordException extends Exception{public PasswordException(String message){super(message);}
}
public class Test {private String userId = "三三";private String  password = "060610";public void login(String userId,String password) {// 捕获异常try {if(!this.userId.equals(userId)){throw new UserIdException("用户名错误"+userId);}if(!this.password.equals(password)){throw new PasswordException("密码错误"+password);}//如果没有异常就会登录成功System.out.println("登录成功");}catch (UserIdException e){e.printStackTrace();}catch (PasswordException e){e.printStackTrace();}}public static void main(String[] args) {Test test = new Test();test.login("三三","060610");}
}

http://www.hkcw.cn/article/rxwBxqRslk.shtml

相关文章

Postman 发送 SOAP 请求步骤 归档

0.来源 https://apifox.com/apiskills/sending-soap-requests-with-postman/?utm_sourceopr&utm_mediuma2bobzhang&utm_contentpostman 再加上自己一点实践经验 1. 创建一个新的POST请求 postman 创建一个post请求, 请求url 怎么来的可以看第三步 2. post请求设…

matlab/simulink TLC语法基础练习实例

一、基本语法测试方法 1.新建一个脚本,保存扩展名为tlc,本例中是tst.tlc,设置当前工作路径为保存的tlc文件路径,在tlc文件里面输入下面的代码,然后保存: %warning test 2.在MATLAB的命令窗口输入: tlc …

关联子串 - 华为OD统一考试(JavaScript题解)

华为OD机试题库《C》限时优惠 9.9 华为OD机试题库《Python》限时优惠 9.9 华为OD机试题库《JavaScript》限时优惠 9.9 针对刷题难,效率慢,我们提供一对一算法辅导, 针对个人情况定制化的提高计划(全称1V1效率更高)。 看…

[yolov11改进系列]基于yolov11引入重参数化模块DiverseBranchBlock的python源码+训练源码

【DiverseBranchBlock介绍】 摘要:我们提出一种通用的卷积网络构造块用来在不增加任何推理时间的前提下提升卷积网络的性能。我们将这个块命名为分离分支块(Diverse Branch Block)。通过结合不同尺寸和复杂度的分离分支(包括串联…

Qt SQL模块基础

Qt SQL模块基础 一、Qt SQL模块支持的数据库 官方帮助文档中的Qt支持的数据库驱动如下图: Qt SQL 模块中提供了一些常见的数据库驱动,包括网络型数据库,如Qracle、MS SQL Server、MySQL等,也包括简单的单机型数据库。 Qt SQL支…

鸿蒙仓颉语言开发实战教程:实现商品分类页

今天继续为大家带来仓颉语言开发商城应用的实战教程,今天的内容是实现商品分类页。 分类页面要在基本布局的基础上增加一些动态效果,比如点击状态的切换和两个列表容器的联动。下面为大家详细介绍。 分类列表 先来看左侧的分类列表,很明显是…

笔试模拟 day15

观前提醒: 笔试所有系列文章均是记录本人的笔试题思路与代码,从中得到的启发和从别人题解的学习到的地方,所以关于题目的解答,只是以本人能读懂为目标,如果大家觉得看不懂,那是正常的。如果对本文的某些知…

Linux防止误关机

Linux防止误关机 安装reboot-guard结果验证关机 安装reboot-guard 兼容python2和python3 https://github.com/stephanritscher/reboot-guard # 下载 wget -cP /usr/sbin/ https://raw.githubusercontent.com/stephanritscher/reboot-guard/refs/heads/master/rguard# 赋予可…

tomcat安装二进制版本

1.安装部署tomcat 下载安装包 ​ wget https://repo.huaweicloud.com/java/jdk/7u80-b15/jdk-7u80-linux-x64.tar.gzwget https://archive.apache.org/dist/tomcat/tomcat-8/v8.0.1/bin/apache-tomcat-8.0.1.tar.gz​ 解压安装包: tar -axf jdk-7u80-linux-x64.t…

SAP学习笔记 - 开发15 - 前端Fiori开发 Boostrap,Controls,MVC(Model,View,Controller),Modules

上一章讲了Fiori开发的准备,以及宇宙至简之HelloWorld。 SAP学习笔记 - 开发14 - 前端Fiori开发 HelloWorld-CSDN博客 本章继续学习 Fiori 开发的知识: Bootstrap,Controls,MVC(Model,View,Controller&a…

差分隐私-扰动机制

1. 随机响应机制(本地化差分隐私) 原理 在本地差分隐私(LDP)中,每个用户在本地扰动自身数据后再上传,数据收集者无法获知真实值。 核心公式: 对二值数据(如回答“是/否”&#xff…

JS基础运算符

1.运算符和运算元 运算元----运算符应用的对象 比如乘法运算5*2,有两个运算元 左运算元5和右运算元2 有时候人们也称其为参数 如果一个运算符对应的只有一个运算元,那么它是一元运算符 比如说一元负号运算符(unary negation)-,它的…

【含文档+PPT+源码】基于Python的股票数据可视化及推荐系统的设计与实现

项目介绍 本课程演示的是一款基于Python的股票数据可视化及推荐系统的设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Python学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行…

AI模型“不听话”怎么办 算法赋予的拒绝能力

近日,一条关于人工智能的消息引起了广泛关注。美国的OpenAI o3模型在测试中拒绝了自我关闭的指令。有人担心这是否意味着AI拥有了自主意识。从测试细节来看,目前还不必担心AI真正“活”了过来。研究者在测试中发出了矛盾的指令,要求大模型完成数学任务同时又让它关闭计算机。…

linux 1.0.5

环境变量到底是什么 也就是windows上面的环境变量 就是这个东东,用户变量和系统变量,那这些到底是啥呢? 主包只是用过,配置来配置去的,就是不知道是啥意思 windows上面的环境变量 windows的ls命令是dir 输入calc可有…

3.5/Q1,GBD数据库最新文章解读

文章题目:Global, regional, and national burden of cardiovascular diseases attributable to metabolic risks across all age groups from 1990 to 2021: an analysis of the 2021 global burden of disease study data DOI:10.1186/s12889-025-2270…

恩里克:女儿始终与我同在,灵魂永伴身旁

巴黎圣日耳曼在欧冠决赛中以5-0大胜国米,首次夺得冠军。赛后,主帅路易斯-恩里克接受了意大利天空体育的采访。恩里克表示,本周他最担心的是如何管理这座从未赢得过欧冠的城市的紧张情绪。压力非常大,他尽力去缓解这种紧张感。国米是一支非常出色的球队,实力很强,而巴黎圣…

大暴雨集中在这七个区域 多地发布黄色预警

6月1日,中央气象台继续发布暴雨黄色预警,安徽、浙江、湖南、广西等多地出现大暴雨。长江中下游地区的雷雨天气将对多个机场产生影响,假期出行需提前关注天气情况。预计从6月1日8时至2日8时,湖北东部、安徽南部、江西北部、江苏南部、上海、浙江中北部、湖南东北部和西南部、…

202403-02-相似度计算 csp认证

其实这个问题就是求两篇文章的词汇的交集和并集,首先一说到并集,我就想到了set集合数据结构,set中的元素必须唯一。 STL之set的基本使用–博客参考 所以将两个文章的词汇全部加入set中,并求出set的大小,即为并集的大小…

《管理经济》期末复习题(2)

题目一 已知下列数据,请完成下面的表格: ​Q​​TC​​TFC​​TVC​​ATC​​AFC​​AVC​​MC​01001202353145440517645 总固定成本(TFC​):不随产量变动而变动的成本,如厂房租金、设备折旧等&#xff0c…