当前位置: 首页 > news >正文

【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 方法声明抛出 Exceptiondivide 方法在除数为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&#xff1a;未处理的异常Example02_2023yang&#xff1a;捕获并处理异常Example03_2023yang&#xff1a;finally块的使用Example04_2023yang&#xff1a;自定义异常Example05_2023yang&#xff1a;忽略异常信息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的并行处理能力

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Web Workers提升JavaScript的并行处理能力 使用Web Workers提升JavaScript的并行处理能力 使用Web Workers提升JavaScript的…...

【含开题报告+文档+PPT+源码】基于Spring Boot智能综合交通出行管理平台的设计与实现

开题报告 随着城市规模的不断扩大和交通拥堵问题的日益严重&#xff0c;综合交通出行管理平台的研究与实现显得尤为重要。现代城市居民对于出行的需求越来越多样化&#xff0c;对于交通信息的获取和处理能力也提出了更高的要求。传统的交通管理方式已经难以满足这些需求&#…...

STM32寄存器结构体详解

一、寄存器结构体详解 对于STM32而言&#xff0c;使用一个结构体将一个外设的所有寄存器都放到一起 二、修改驱动 1、添加清除bss段代码 2、添加寄存器结构体 在寄存器结构体中添加寄存器的时候一定要注意地址的连续性&#xff0c;如果地址不连续的话&#xff0c;要添加占位…...

如何建立devops?

要建立DevOps系统&#xff0c;可以遵循以下步骤&#xff1a; 一、明确目标与确立原则 明确目标&#xff1a;确定DevOps系统的总体目标&#xff0c;例如提高软件发布频率、缩短反馈时间、提升软件质量等。确立原则&#xff1a;确立DevOps的核心原则&#xff0c;包括持续集成&a…...

shell基础(3)

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团…...

2024年11月16日Github流行趋势

项目名称&#xff1a;opendatalab / MinerU 项目维护者&#xff1a;myhloli, dt-yy, Focusshang, drunkpig, papayalove等项目介绍&#xff1a;一站式开源高质量数据提取工具&#xff0c;支持PDF/网页/多格式电子书提取。项目star数&#xff1a;16,398项目fork数&#xff1a;1,…...

k8s更新

k8s更新 1.30 升级了 Metrics Server 到 v0.7.0 kubectl get cronjob命令增加了时区列显示 kubectl describe命令在描述VolumeAttributesClass、作业、Pod 模板等时提供了更多信息&#xff0c;有助于深入排查问题。 改进了kubectl logs命令&#xff0c;当 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拖拽文件上传

一、首先创建一个上传文件的类&#xff0c;继承Control类&#xff0c;如下&#xff1a; public class UploadControl : Control{private Image _image;public UploadControl(){this.SetStyle(ControlStyles.UserPaint | //控件自行绘制&#xff0c;而不使用操作系统的绘制Cont…...

IT运维的365天--019 用php做一个简单的文件上传工具

前情提要&#xff1a;朋友的工作室&#xff0c;有几个网站分布在不同的服务器上&#xff0c;要经常进行更新&#xff0c;之前是手动复制压缩包到各个服务器去更新&#xff08;有写了自动更新的Shell脚本&#xff09;。但还是觉得太麻烦&#xff0c;每次还要手动传输压缩包到各个…...

详细的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 种设计模式详解

设计模式的分类 总体来说设计模式分为三大类&#xff1a; 创建型模式&#xff0c;共五种&#xff1a;单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。 结构型模式&#xff0c;共七种&#xff1a;适配器模式、装饰器模式、代理模式、外观模式、桥接模式、 组合模…...

Python毕业设计选题:基于django+vue的二手物品交易系统

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 店铺管理 二手物品管理 广告管理 留言反馈 订单…...

VMware 17虚拟Ubuntu 22.04设置共享目录

VMware 17虚拟Ubuntu 22.04设置共享目录 共享文件夹挂载命令&#xff01;&#xff01;&#xff01;<font colorred>配置启动自动挂载Chapter1 VMware 17虚拟Ubuntu 22.04设置共享目录一、卸载老版本二、安装open-vm-tools<font colorred>三、配置启动自动挂载四、添…...

Rust学习(五):泛型、trait

Rust学习&#xff08;五&#xff09;&#xff1a;泛型、trait 1、泛型&#xff1a; 相信小伙伴们一定还记得&#xff0c;之前我们实现了一个add函数&#xff0c;并指定了参数类型为&#xff1a;i32&#xff1a; fn add(x:i32, y:i32) ->i32 {x y }这里我们就会遇到一个问…...

智能零售柜商品识别

项目源码获取方式见文章末尾&#xff01; 600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…...

2024智能机器人与自动控制国际学术会议 (IRAC 2024)

主办&#xff0c;承办&#xff0c;支持单位 会议官网 www.icirac.org 大会时间&#xff1a;2024年11月29-12月1日 大会简介 2024智能机器人与自动控制国际学术会议 &#xff08;IRAC 2024&#xff09;由华南理工大学主办&#xff0c;会议将于2024年11月29日-12月1日在中国广…...

计算机组成原理:总线与微命令

实验四 总线与微命令实验 一、实验目的 1&#xff09; 理解总线的概念和作用。 2&#xff09; 连接运算器与存储器&#xff0c;熟悉计算机的数据通路。 3&#xff09; 理解微命令与微操作的概念。 二、实验要求 1&#xff09; 做好实验预习&#xff0c;在实验之前填写好…...

10月回顾 | Apache SeaTunnel社区动态与进展一览

各位热爱 Apache SeaTunnel 的小伙伴们&#xff0c;社区10月份月报来啦&#xff0c;请查收&#xff01; 这里将记录Apache SeaTunne社区每月动态和进展&#xff0c;欢迎关注。 月度Merge之星 感谢以下小伙伴上个月为 Apache SeaTunnel 所做的精彩贡献&#xff08;排名不分先…...

网络基础(4)传输层

既然是传输层首先就要明确实在层状结构的哪里,除开物理层之外分成了四层协议: 到这里上层(应用层)的使用已经没有问题&#xff0c;之前使用的套接字都是在应用层的。 再说端口号 到一个主机收到一个报文的时候&#xff0c;这个报文中一定存在这个报文需要到的主机的ip号。如果…...

计算机的错误计算(一百五十六)

摘要 探讨 MATLAB 中双曲反余切函数 acoth(x) 在 附近数的计算精度问题。 Acoth(x)函数的定义为 例1. 已知 计算 与 直接贴图吧&#xff1a; 另外&#xff0c;16位的正确值分别为 0.1110083774360105e2 与 -0.1110083774360105e2&#xff08;ISRealsoft 提供。通过计算…...

爬虫开发工具与环境搭建——开发工具介绍

第二章&#xff1a;爬虫开发工具与环境搭建 第一节 开发工具介绍 爬虫开发需要一些合适的工具和框架来高效地抓取网页数据。在这节中&#xff0c;我们将介绍常用的开发工具&#xff0c;帮助开发者快速搭建爬虫开发环境。 1. Python与爬虫框架选择 Python因其简洁、易学的语法…...

Oracle 19c PDB克隆后出现Warning: PDB altered with errors受限模式处理

在进行一次19c PDB克隆过程中&#xff0c;发现克隆结束&#xff0c;在打开后出现了报错&#xff0c;PDB变成受限模式&#xff0c;以下是分析处理过程 09:25:48 SQL> alter pluggable database test1113 open instancesall; Warning: PDB altered with errors. Elapsed: 0…...

阿里云ACK容器如何配置pod分散在集群的不同节点上

阿里云ACK容器如何配置pod分散在集群的不同节点上 1.核心原理 是使用pod间反亲和性&#xff08;podAntiAffinity&#xff09;&#xff0c;pod间反亲和性又分为软约束反亲和和硬约束反亲和。 2.软约束反亲和和硬约束反亲和区别&#xff1a; preferredDuringSchedulingIgnore…...

Qt信号和槽

信号和槽的概念 在Linux中我们也学过信号 Signal&#xff0c;这是进程间通信的一种方式&#xff0c;这里大致分为三个要素&#xff1a; 信号源&#xff1a;谁发送的信号&#xff08;用户进程&#xff0c;系统内核&#xff0c;终端或者作业控制&#xff0c;&#xff09; 信号的类…...

Python知识点精汇!字符串:定义、截取(索引)和其内置函数

目录 一、字符串的定义 二、字符串的截取 1.截取干啥的 2.怎么用截取 3.打印多次 4.两个字符串拼接在一起 三、字符串内置函数 1.查询函数&#xff1a; &#xff08;1&#xff09;find(str,start,end) &#xff08;2&#xff09;index&#xff08;str,start,end&#…...

【CV】头盔检测区域入侵项目

文章目录 🌕项目和数据下载🌙安全帽佩戴数据集🌕收集数据数据🌕wbem格式视频转avi或者mp4🌕跑通区域入侵🌙多边形标注工具下载🌙使用Python脚本打开视频获取一张用来标注的图片🌙打开labelme标注一个多边行🌙程序可以识别的标注json格式🌙修改代码读取Json…...

大数据应用开发——实时数据处理(一)

前言 大数据应用开发——实时数据采集 大数据应用开发——实时数据处理 Flink完成Kafka中的数据消费&#xff0c;将数据分发至Kafka的dwd层中 并在HBase中进行备份 大数据应用开发——数据可视化 hadoop&#xff0c;zookeeper&#xff0c;kafka&#xff0c;flink要开启 目…...