【Java】异常处理实例解析
文章目录
- Java异常处理实例解析
- Example01_2023yang:未处理的异常
- Example02_2023yang:捕获并处理异常
- Example03_2023yang:finally块的使用
- Example04_2023yang:自定义异常
- Example05_2023yang:忽略异常信息
- Example06_2023yang:方法声明抛出异常
- Example07_2023yang:抛出并捕获自定义异常
- Example09_2023yang:自定义异常类
Java异常处理实例解析
在Java编程中,异常处理是一个重要的概念,它帮助我们处理程序运行时可能出现的错误。以下是几个关于异常处理的示例,每个示例都包含了详细的注释和运行结果。
Example01_2023yang:未处理的异常
public class Example01_2023yang {public static void main(String[] args) {// 调用divide方法,传入参数4和0int result = divide(4, 0);// 打印divide方法的返回结果System.out.println(result);}public static int divide(int x, int y) {// 计算x除以y的结果,并赋值给result变量int result = x / y;// 返回计算结果return result;}
}
运行结果:
java.lang.ArithmeticException: / by zero
解释: 这个示例中,divide 方法尝试将4除以0,这在Java中是不允许的,因此会抛出一个 ArithmeticException。
Example02_2023yang:捕获并处理异常
public class Example02_2023yang {public static void main(String[] args) {try {// 定义数组下标越界的案例int[] a = {1, 2, 3};System.out.println(a[5]);// 尝试调用divide方法,传入参数4和0int result = divide(4, 0);// 如果divide方法没有抛出异常,打印结果System.out.println(result);} catch (Exception e) {// 如果divide方法抛出异常,捕获异常并打印异常信息System.out.println("捕捉的异常信息为:" + e.getMessage());}// 打印这条信息表示程序继续向下执行System.out.println("程序进行向下执行.....");}public static int divide(int x, int y) {// 计算x除以y的结果,并赋值给result变量int result = x / y;// 返回计算结果return result;}
}
运行结果:
捕捉的异常信息为:/ by zero
程序进行向下执行.....
解释: 这个示例中,我们尝试访问数组的一个不存在的索引,这会抛出一个 ArrayIndexOutOfBoundsException。然后,我们尝试将4除以0,这会抛出一个 ArithmeticException。这两个异常都被 catch 块捕获,并打印了异常信息。
Example03_2023yang:finally块的使用
public class Example03_2023yang {public static void main(String[] args) {try {// 尝试调用divide方法,传入参数4和0int result = divide(4, 0);// 如果divide方法没有抛出异常,打印结果System.out.println(result);} catch (Exception e) {// 如果divide方法抛出异常,捕获异常并打印异常信息System.out.println("捕捉的异常信息为:" + e.getMessage());// 遇到异常后,main方法结束执行return;} finally {// 无论是否发生异常,finally代码块都会执行System.out.println("进入finally代码块");}// 如果没有异常发生,或者在catch代码块中没有return,程序会继续向下执行System.out.println("程序继续向下....");}public static int divide(int x, int y) {// 计算x除以y的结果,并赋值给result变量int result = x / y;// 返回计算结果return result;}
}
运行结果:
捕捉的异常信息为:/ by zero
进入finally代码块
解释: 这个示例中,finally 代码块无论是否发生异常都会执行。即使在 catch 块中有 return 语句,finally 代码块仍然会执行。
Example04_2023yang:自定义异常
public class Example04_2023yang {public static void main(String[] args) {try {// 调用divide方法,传入参数4和0来模拟除以零的情况int result = divide(4, 0);// 如果divide方法没有抛出异常,打印结果System.out.println(result);} catch (Exception e) {System.out.println("开始处理Exception类型异常");// 如果divide方法抛出异常,捕获异常并打印异常信息System.out.println("发生异常:" + e.getMessage());} finally {System.out.println("我是finally处理的内容");}}public static int divide(int x, int y) throws Exception {// 检查除数是否为0,如果是,则抛出ArithmeticException异常if (y == 0) {throw new Exception("除数不能为0");}// 计算x除以y的结果,并赋值给result变量int result = x / y;// 返回计算结果return result;}
}
运行结果:
开始处理Exception类型异常
发生异常:除数不能为0
我是finally处理的内容
解释: 这个示例中,divide 方法在除数为0时抛出了一个自定义的 Exception。这个异常被 catch 块捕获,并打印了异常信息。
Example05_2023yang:忽略异常信息
public class Example05_2023yang {public static void main(String[] args) {try {// 尝试调用divide方法,传入参数4和2int result = divide(4, 2);// 如果divide方法没有抛出异常,打印结果System.out.println(result);} catch (Exception e) {// 如果divide方法抛出异常,捕获异常但忽略异常信息e.getMessage();}}public static int divide(int x, int y) {// 计算x除以y的结果,并赋值给result变量int result = x / y;// 返回计算结果return result;}
}
运行结果:
2
解释: 这个示例中,divide 方法正常执行并返回结果。catch 块捕获了异常,但没有打印异常信息。
Example06_2023yang:方法声明抛出异常
public class Example06_2023yang {public static void main(String[] args) throws Exception {// 调用divide方法,传入参数4和0,这里会发生除以零的操作int result = divide(4, 0);// 打印divide方法的返回结果// 但由于除以零,这里实际上不会执行,程序会在divide方法中抛出异常System.out.println(result);}public static int divide(int x, int y) {// 计算x除以y的结果,并赋值给result变量// 在这个例子中,当y为0时,会发生除以零的操作,导致程序抛出ArithmeticException异常int result = x / y;// 返回计算结果return result;}
}
运行结果:
java.lang.ArithmeticException: / by zero
解释: 这个示例中,main 方法声明抛出 Exception,divide 方法在除数为0时抛出了 ArithmeticException,这个异常被 main 方法抛出。
Example07_2023yang:抛出并捕获自定义异常
public class Example07_2023yang {public static void printAge(int age) throws Exception {// 检查传入的年龄是否小于或等于0if (age <= 0) {// 如果年龄不合法(小于或等于0),则抛出一个Exception异常,并附带错误信息throw new Exception("输入年龄有误,必须是整数!");} else {// 如果年龄合法,打印出此人的年龄System.out.println("此人年龄为:" + age);}}public static void main(String[] args) {// 定义一个变量age并初始化为-1,这里模拟了一个非法的年龄值int age = -1;try {// 调用printAge方法,传入age变量printAge(age);} catch (Exception e) {// 如果printAge方法抛出异常,捕获这个异常并打印异常信息System.out.println("捕获的异常信息为:" + e.getMessage());}}
}
运行结果:
捕获的异常信息为:输入年龄有误,必须是整数!
解释: 这个示例中,printAge 方法在年龄不合法时抛出了一个自定义的 Exception。这个异常被 main 方法的 catch 块捕获,并打印了异常信息。
Example09_2023yang:自定义异常类
class DivideByminusException extends Exception {// 构造函数,不提供任何信息,调用父类的无参构造函数public DivideByminusException() {super();}// 构造函数,接收一个字符串消息作为异常信息,调用父类的带消息的构造函数public DivideByminusException(String message) {super(message);}
}public class Example09_2023yang {public static void main(String[] args) {try {// 调用divide方法,传入参数4和-2,这里模拟了一个除以负数的情况int result = divide(4, -2);// 如果divide方法没有抛出异常,打印结果System.out.println(result);} catch (DivideByminusException e) {// 如果divide方法抛出DivideByminusException异常,捕获这个异常并打印异常信息System.out.println(e.getMessage());}}public static int divide(int x, int y) throws DivideByminusException {// 检查除数是否为负数,如果是,则抛出DivideByminusException异常if (y < 0) {throw new DivideByminusException("除数是负数");}// 计算x除以y的结果,并赋值给result变量int result = x / y;// 返回计算结果return result;}
}
运行结果:
除数是负数
解释: 这个示例中,divide 方法在除数为负数时抛出了一个自定义的 DivideByminusException。这个异常被 main 方法的 catch 块捕获,并打印了异常信息。
相关文章:
【Java】异常处理实例解析
文章目录 Java异常处理实例解析Example01_2023yang:未处理的异常Example02_2023yang:捕获并处理异常Example03_2023yang:finally块的使用Example04_2023yang:自定义异常Example05_2023yang:忽略异常信息Example06_2023…...
flutter调试
上面的调试The following FormatException was thrown while handling a gesture: Invalid double -Infinity874When the exception was thrown, this was the stack: #0 double.parse (dart:core-patch/double_patch.dart:113:28) #1 _CalculatorScreenState._butt…...
使用Web Workers提升JavaScript的并行处理能力
💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 使用Web Workers提升JavaScript的并行处理能力 使用Web Workers提升JavaScript的并行处理能力 使用Web Workers提升JavaScript的…...
【含开题报告+文档+PPT+源码】基于Spring Boot智能综合交通出行管理平台的设计与实现
开题报告 随着城市规模的不断扩大和交通拥堵问题的日益严重,综合交通出行管理平台的研究与实现显得尤为重要。现代城市居民对于出行的需求越来越多样化,对于交通信息的获取和处理能力也提出了更高的要求。传统的交通管理方式已经难以满足这些需求&#…...
STM32寄存器结构体详解
一、寄存器结构体详解 对于STM32而言,使用一个结构体将一个外设的所有寄存器都放到一起 二、修改驱动 1、添加清除bss段代码 2、添加寄存器结构体 在寄存器结构体中添加寄存器的时候一定要注意地址的连续性,如果地址不连续的话,要添加占位…...
如何建立devops?
要建立DevOps系统,可以遵循以下步骤: 一、明确目标与确立原则 明确目标:确定DevOps系统的总体目标,例如提高软件发布频率、缩短反馈时间、提升软件质量等。确立原则:确立DevOps的核心原则,包括持续集成&a…...
shell基础(3)
声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团…...
2024年11月16日Github流行趋势
项目名称:opendatalab / MinerU 项目维护者:myhloli, dt-yy, Focusshang, drunkpig, papayalove等项目介绍:一站式开源高质量数据提取工具,支持PDF/网页/多格式电子书提取。项目star数:16,398项目fork数:1,…...
k8s更新
k8s更新 1.30 升级了 Metrics Server 到 v0.7.0 kubectl get cronjob命令增加了时区列显示 kubectl describe命令在描述VolumeAttributesClass、作业、Pod 模板等时提供了更多信息,有助于深入排查问题。 改进了kubectl logs命令,当 Pod 未找到时会显示所…...
ES6进阶知识一
目录 一、ES6构建工具与模块化 1.1.构建工具 1.1.1.Webpack 安装 Webpack 配置 Webpack 使用 Webpack 1.1.2.Babel 安装 Babel 配置 Babel 1.2.ES6模块化 1.命名导出导入 导出模块 导入模块 2. 默认导出与导入 导出模块 导入模块 1.3.完整案例展示 1. 项目结构…...
C#/WinForm拖拽文件上传
一、首先创建一个上传文件的类,继承Control类,如下: public class UploadControl : Control{private Image _image;public UploadControl(){this.SetStyle(ControlStyles.UserPaint | //控件自行绘制,而不使用操作系统的绘制Cont…...
IT运维的365天--019 用php做一个简单的文件上传工具
前情提要:朋友的工作室,有几个网站分布在不同的服务器上,要经常进行更新,之前是手动复制压缩包到各个服务器去更新(有写了自动更新的Shell脚本)。但还是觉得太麻烦,每次还要手动传输压缩包到各个…...
详细的oracle rac维护命令集合
一、查看命令 所有实例和服务的状态 $srvctl status database -d orcl Instance orcl1 is running on node db1 Instance orcl2 is running on node db2 单个实例的状态 $ srvctl status instance -d orcl -i orcl2 Instance orcl2 is running on node db2 单个节点的应用程序…...
23 种设计模式详解
设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、 组合模…...
Python毕业设计选题:基于django+vue的二手物品交易系统
开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 店铺管理 二手物品管理 广告管理 留言反馈 订单…...
VMware 17虚拟Ubuntu 22.04设置共享目录
VMware 17虚拟Ubuntu 22.04设置共享目录 共享文件夹挂载命令!!!<font colorred>配置启动自动挂载Chapter1 VMware 17虚拟Ubuntu 22.04设置共享目录一、卸载老版本二、安装open-vm-tools<font colorred>三、配置启动自动挂载四、添…...
Rust学习(五):泛型、trait
Rust学习(五):泛型、trait 1、泛型: 相信小伙伴们一定还记得,之前我们实现了一个add函数,并指定了参数类型为:i32: fn add(x:i32, y:i32) ->i32 {x y }这里我们就会遇到一个问…...
智能零售柜商品识别
项目源码获取方式见文章末尾! 600多个深度学习项目资料,快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…...
2024智能机器人与自动控制国际学术会议 (IRAC 2024)
主办,承办,支持单位 会议官网 www.icirac.org 大会时间:2024年11月29-12月1日 大会简介 2024智能机器人与自动控制国际学术会议 (IRAC 2024)由华南理工大学主办,会议将于2024年11月29日-12月1日在中国广…...
计算机组成原理:总线与微命令
实验四 总线与微命令实验 一、实验目的 1) 理解总线的概念和作用。 2) 连接运算器与存储器,熟悉计算机的数据通路。 3) 理解微命令与微操作的概念。 二、实验要求 1) 做好实验预习,在实验之前填写好…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...
