当前位置: 首页 > 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;在实验之前填写好…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

Python常用模块:time、os、shutil与flask初探

一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...

Python的__call__ 方法

在 Python 中&#xff0c;__call__ 是一个特殊的魔术方法&#xff08;magic method&#xff09;&#xff0c;它允许一个类的实例像函数一样被调用。当你在一个对象后面加上 () 并执行时&#xff08;例如 obj()&#xff09;&#xff0c;Python 会自动调用该对象的 __call__ 方法…...