异常-Exception
异常介绍
- 基本概念
Java语言中,将程序执行中发生的不正常情况称为“异常”。(开发过程中的语法错误和逻辑错误不是异常) - 执行过程中所发生的异常事件可分为两大类
1,Error(错误):Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。Error是严重错误,程序会崩溃
2,Exception:其他因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码处理。例如 空指针访问,试图读取不存在的文件,网络连接中断等等。
Exception分为两大类:运行时异常(程序运行时,发生的异常)
编译时异常(编程时,编译器检查出的异常) - 异常体系图

- 异常体系图小结
1,异常分为两大类:运行时异常;编译时异常
2,运行时异常:编译器检查不出来,一般是指编程时的逻辑错误,是程序员应该避免其出现的异常。java.lang.RuntimeException类及它的子类都是运行时异常
3,对于运行时异常,可以不作处理,因为这类异常很普通,若全处理可能会对程序的可持续性和运行效率产生影响
4,编译时异常,是编译器要求必须处置的异常
运行时异常
- 常见的运行时
1,NullPointerException 空指针异常
2,ArithmeticException 数学运算异常
3,ArrayIndexOutOfBoundsException 数组下标越界异常
4,ClassCastException 类型转换异常
5,NumberFormatException 数字格式不正确异常[]
编译异常
- 介绍:编译异常是指在编译期间,就必须处理的异常,否则代码不能通过编译
- 常见的编译异常
1,SQLException//操作数据库时,查询表可能发生异常
2,IOException//操作文件时,发生的异常
3,FileNotFoundException//当操作一个不存在的文件时,发生异常
4,ClassNotFoundException//加载类,而该类不存在时,发生异常
5,EOFException//操作文件,到文件末,发生异常
6,IIIegalArguementException//参数异常
异常处理
基本介绍
异常处理就是当异常发生时,对异常处理的方式
异常处理的方式
- try-catch-finally:程序员在代码中捕获发生的异常,自行处理
- throws:将发生的异常抛出。交给调用者(方法)来处理,最顶级的处理者就是JVM
异常处理的示意图


try-catch 异常处理
- 基本介绍:Java提供try和catch块来处理异常。try块用于包含可能出错的代码,catch块用于处理try块中发生的异常,可以根据需要在程序中有多个try-catch块
- 基本语法
try{
//可疑代码
//将异常生成对应的异常对象,传递给catch块
}catch(异常){
//对异常的处理
}
//如果没有finally,语法是可以通过的
public class ExceptionExcerise {public static void main(String[] args) {int num1 = 10;int num2 = 0;int res = 0;try {res = num1/num2;} catch (Exception e) {System.out.println(e.getMessage());//输出具体的错误}}
}
结果

- try-catch 方式处理异常-注意事项
1,如果异常发生了,则异常发生后面的代码不会执行,直接进入到catch块
2,如果异常没有发生,则顺序执行try的代码块,不会进入到catch
3,如果希望不管是否发生异常,都执行某段代码(比如关闭连接,释放资源等),则使用如下代码-finally
public class ExceptionExcerise {public static void main(String[] args) {//异常处理快捷键:ctrl + atl + t//1. 如果异常发生了,则异常发生后面的代码不会执行,直接进入到 catch 块//2. 如果异常没有发生,则顺序执行 try 的代码块,不会进入到 catch//3. 如果希望不管是否发生异常,都执行某段代码(比如关闭连接,释放资源等)则使用如下代码- finallytry {String str = "zl";int a = Integer.parseInt(str);System.out.println("数字:"+a);//不会执行} catch (NumberFormatException e) {System.out.println("异常信息="+e.getMessage());} finally {System.out.println("代码块被执行");//一定会执行}System.out.println("程序继续");}
}
结果

4,可以有多个catch语句,捕获不同的异常(进行不同的业务处理),要求父类异常在后,子类异常在前,比如(Exception在后,NullPointerException在前),如果发生异常,只会匹配一个catch
public class ExceptionExcerise {public static void main(String[] args) {try {Person person = new Person();person = null;System.out.println(person.getName());//NullPointerExceptionint n1= 10;int n2 = 0;int res = n1/n2;//ArithmeticException} catch (NullPointerException e) {System.out.println("空指针异常="+e.getMessage());//只会匹配一个catch} catch (ArithmeticException e ){System.out.println("算术异常="+e.getMessage());}catch (Exception e){System.out.println(e.getMessage());}finally {}}
}
class Person{private String name = "Jack";public String getName() {return name;}
}
结果

5,可以进行try-finally配合使用,这种永达相当于没有捕获异常,因此程序会直接崩溃退出。
- try-catch-finally 执行顺序小结
1,如果没有出现异常,则执行try块中所有语句,不知执行catch块中语句,如果有finally,最后还需执行finally,最后还租要执行finally中的语句
2,如果出现异常,则try块中异常发生后,try块剩下的语句不再执行。将执行catch块中的语句,如果有finally,最后还需执行finally里面的语句!
throws异常处理
- 基本介绍
1,如果一个方法中的语句执行时,可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显示的声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理
2,在方法声明中用throws语句可以声明抛出异常的列表,throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类 - 注意事项
1,对于编译异常,程序中必须处理,比如try-catch或throws
2,对于运行时异常,程序中如果没有处理,默认就是throws的方式处理
3,子类重写父类的方法时,对抛出异常的规定:子类重写的方法,所抛出的异常类型要么和父类抛出的异常一致,要么为父类抛出的异常的类型的子类
4,在throws过程中,如果有方法try-catch,就相当于处理异常,就可以不必throws
public class ExceptionExcerise {public static void main(String[] args) {f2();}public static void f2()/*throws ArithmeticException */{//对于运行时异常,程序中如果没有处理,默认就是throws 的方式处理int n1 = 10;int n2 = 0;double res = n1/n2;}public static void f1()throws FileNotFoundException {//调用 f3() 报错//1. 因为 f3() 方法抛出的是一个编译异常//2. 即这时,就要 f1() 必须处理这个编译异常//3. 在 f1() 中,要么 try-catch-finally ,或者继续 throws 这个编译异常f3();//抛出异常}public static void f3()throws FileNotFoundException {FileInputStream fileInputStream = new FileInputStream("C:\\Users\\13627\\Desktop\\照片");//编译异常,文件不存在}public static void f4(){//1. 在 f4()中调用方法 f5() 是 OK//2. 原因是 f5() 抛出的是运行异常//3. 而 java 中,并不要求程序员显示处理,因为有默认处理机制f5();}public static void f5()throws ArithmeticException{}
}
class Father{public void method()throws RuntimeException{}
}
class Son extends Father{//子类重写父类的方法时,对抛出异常的规定:// 子类重写的方法,所抛出的异常类型要么和父类抛出的异常一致,要么为父类抛出的异常类型的子类型@Overridepublic void method()throws ArithmeticException {}
}
结果

自定义异常
- 基本概念
当程序中出现了某些“错误”,但该错误信息并没有在Throwable子类中描述处理,这个时候可以自己设计异常类,用于描述该错误信息 - 自定义异常的步骤
1,定义类:自定义异常类名(自己写)继承Exception或RuntimeException
2,如果继承Exception,属于编译异常
3,如果继承RuntimeException,属于运行异常(通常情况下,继承RuntimeException)
实例:
public class ExceptionExcerise01 {public static void main(String[] args) /*throws AgeException*/{int age = 180;//要求范围在 18 – 120 之间,否则抛出一个自定义异常if (!(age>=18&&age<=120)){//这里我们可以通过构造器,设置信息throw new AgeException("年龄需要在18-120之间");}System.out.println("你的年龄在正常范围");}
}/*** 自定义一个异常* 1,通常情况下,我们自定义异常是继承RuntimeException* 2,即把自定义异常做成 运行时异常,好处时,我们可以使用默认的处理机制* 3,也就是比较方便*/
class AgeException extends RuntimeException{public AgeException(String message) {//构造器super(message);}
}
结果

更改年龄
public class ExceptionExcerise01 {public static void main(String[] args) /*throws AgeException*/{int age = 100;//要求范围在 18 – 120 之间,否则抛出一个自定义异常if (!(age>=18&&age<=120)){//这里我们可以通过构造器,设置信息throw new AgeException("年龄需要在18-120之间");}System.out.println("你的年龄在正常范围");}
}/*** 自定义一个异常* 1,通常情况下,我们自定义异常是继承RuntimeException* 2,即把自定义异常做成 运行时异常,好处时,我们可以使用默认的处理机制* 3,也就是比较方便*/
class AgeException extends RuntimeException{public AgeException(String message) {//构造器super(message);}
}
结果

throw和throws的区别

相关文章:
异常-Exception
异常介绍 基本概念 Java语言中,将程序执行中发生的不正常情况称为“异常”。(开发过程中的语法错误和逻辑错误不是异常)执行过程中所发生的异常事件可分为两大类 1,Error(错误):Java虚拟机无法…...
ctfshow——SQL注入
文章目录 SQL注入基本流程普通SQL注入布尔盲注时间盲注报错注入——extractvalue()报错注入——updataxml()Sqlmap的用法 web 171——正常联合查询web 172——查看源代码、联合查询web 173——查看源代码、联合查询web 174——布尔盲注web 176web 177——过滤空格web 178——过…...
第十三章 计算机网络
这里写目录标题 1.网络设备2.协议簇2.1电子邮件(传输层)2.2地址解析(网际层)2.3DHCP(动态主动配置协议)2.4URL(统一资源定位器)2.5IP地址和子网掩码 1.网络设备 物理层:中继器,集线器(多路中继器) 数据链路层:网桥,交换机(多端口…...
商品详情 API 返回值说明
商品详情API接口在多个领域和场景中都有广泛的应用,以下是一些常见的应用场景: 竞品分析:企业可以利用商品详情API接口获取竞品的所有详细信息,如价格、发货地、上架时间、销售量等。通过分析这些竞品信息,企业可以更…...
层级实例化静态网格体组件:开启大量模型处理之门
前言 在数字孪生的世界里,我们常常需要构建大量的模型来呈现真实而丰富的场景。然而,当使用静态网格体 (StaticMesh )构建大量模型时,可能会遇到卡顿的问题,这给我们带来了不小的困扰😣。那么&…...
【网络知识】光猫、路由器 和 交换机 的作用和区别?
数字信号:是指自变量是离散的、因变量也是离散的信号,这种信号的自变量用整数表示,因变量用有限数字中的一个数字来表示。在计算机中,数字信号的大小常用有限位的二进制数表示。 模拟信号:模拟信号是指用连续变化的物…...
初识Electron,创建桌面应用
历史小剧场 呜呼!古有匈奴犯汉,晋室不纲,铁木夺宋,虏清入关,神舟陆沉二百年有余,中国之见灭于满清初非满人能灭之,能有之也因有汉奸以作虎怅,残同胞媚异种,始有吴三桂洪承…...
AI编码时代到来?实现编程梦想的利器—Baidu Comate测评
文章目录 Comate智能编码是什么?Comate支持的环境 Comate应用安装实际操作对话式生成代码生成代码注释智能单测项目测试调优功能 总结 Comate智能编码是什么? 在如今这个拥抱AI的时代,市面上已经产出了很多Ai代码助手,如果你还没…...
去中心化自治组织(DAO)
文章目录 一、DAO (Decentralized Autonomous Organization) 去中心化自治组织 二、举例说明 1、例子1 2、例子2 总结 一、DAO (Decentralized Autonomous Organization) 去中心化自治组织 DAO是一种基于区块链平台上的组织结构,它通过智能合约来实现组织的…...
MySQL之多表查询
1. 前言 多表查询,也称为关联查询.指两个或两个以上的表一起完成查询操作.前提条件 : 这些一起查询的表之间是有关系的(一对一/一对多).他们之间一定是有关联字段,这个关联字段可能建立了外键,也可能没有建立外键. 2. 笛卡尔积现象(交叉连接…...
极端天气频发,我们普通人如何保全自己
随着全球气候变暖的加剧,极端天气事件如同一位不请自来的“不速之客”,频繁地闯入我们的生活。暴风雨、暴风雪、台风、干旱、热浪等极端天气现象,不仅给人们的生命和财产安全带来了前所未有的挑战,更对社会的正常秩序构成了严重威…...
直面市场乱价,品牌商家该如何解决?
在当今的商业世界中,品牌商面临着一系列严峻挑战,其中如何有效管理经销商价格是一个关键难题。经销商随意调整价格的行为,不仅会损害品牌的信誉与形象,还可能导致市场秩序混乱,使品牌利润大幅缩水。因此,采…...
Spring中的Bean相关理解
在Spring框架中,Bean是一个由Spring IoC容器实例化、配置和管理的对象。Bean是一个被Spring框架管理并且被应用程序各个部分所使用的对象。Spring IoC容器负责Bean的创建、初始化、依赖注入以及销毁等生命周期管理。 注:喜欢的朋友可以关注公众号“JAVA学…...
操作系统实战(二)(linux+C语言)
实验内容 通过Linux 系统中管道通信机制,加深对于进程通信概念的理解,观察和体验并发进程间的通信和协作的效果 ,练习利用无名管道进行进程通信的编程和调试技术。 管道pipe是进程间通信最基本的一种机制,两个进程可以通过管道一个在管道一…...
哪些情况下会触发MySQL的预读机制?
MySQL的预读机制主要与其底层存储引擎的实现有关,尤其是InnoDB存储引擎。预读(Pre-reading)或预取(Prefetching)是一种性能优化技术,其中数据库系统主动读取可能很快就会被查询到的数据页到缓冲池ÿ…...
react使用谷歌人机验证
在项目中,需要对请求验证,防止被爆破,这里使用的是谷歌的recaptcha-v3。 1.申请谷歌人机验证的api 申请链接,申请完后需要将两个谷歌颁发的key分别写入前,后端的配置环境中,后面会使用. 2.前端部分 前端使用的是viteC…...
java JMH 学习
JMH 是什么? JMH(Java Microbenchmark Harness)是一款专用于代码微基准测试的工具集,其主要聚焦于方法层面的基准测试,精度可达纳秒级别。此工具由 Oracle 内部负责实现 JIT 的杰出人士编写,他们对 JIT 及…...
本地运行AI大模型简单示例
一、引言 大模型LLM英文全称是Large Language Model,是指包含超大规模参数(通常在十亿个以上)的神经网络模型。2022年11月底,人工智能对话聊天机器人ChatGPT一经推出,人们利用ChatGPT这样的大模型帮助解决很多事情&am…...
图像处理:时域、空域、频率的滤波介绍
首先要搞清楚为什么会呈现出不同域的维度,来理解和处理图像,原因是图像的构成有多个维度的信息特点。比如一段视频从时间顺序来看,相邻的2个图像帧绝大部分信息是相同的,这就构成了前向预测的理论基础;比如一帧图像从空…...
TC8002D 是一颗带关断模式的音频功放IC
一、一般概述 TC8002D是一颗带关断模式的音频功放IC。在5V输入电压下工作时,负载(3Ω)上的平均功率 为3 W,且失真度不超过10%。而对于手提设备而言,当VDD作用于关断端时,TC8002D将会进入关断模式,此时的功耗极…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...
Mysql故障排插与环境优化
前置知识点 最上层是一些客户端和连接服务,包含本 sock 通信和大多数jiyukehuduan/服务端工具实现的TCP/IP通信。主要完成一些简介处理、授权认证、及相关的安全方案等。在该层上引入了线程池的概念,为通过安全认证接入的客户端提供线程。同样在该层上可…...
链式法则中 复合函数的推导路径 多变量“信息传递路径”
非常好,我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题,统一使用 二重复合函数: z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y)) 来全面说明。我们会展示其全微分形式(偏导…...
Axure Rp 11 安装、汉化、授权
Axure Rp 11 安装、汉化、授权 1、前言2、汉化2.1、汉化文件下载2.2、windows汉化流程2.3、 macOs汉化流程 3、授权 1、前言 Axure Rp 11官方下载链接:https://www.axure.com/downloadthanks 2、汉化 2.1、汉化文件下载 链接: https://pan.baidu.com/s/18Clf…...
MCP和Function Calling
MCP MCP(Model Context Protocol,模型上下文协议) ,2024年11月底,由 Anthropic 推出的一种开放标准,旨在统一大模型与外部数据源和工具之间的通信协议。MCP 的主要目的在于解决当前 AI 模型因数据孤岛限制而…...
