07 异常

news/2025/1/14 21:54:29/文章来源:https://www.cnblogs.com/you-ni/p/18671804

什么是异常

异常就像是生活中遇到的意外情况。在程序运行过程中,可能会出现一些意想不到的问题,比如要打开的文件不存在、网络连接突然中断、除数为零等,这些就是异常。当异常发生时,如果不处理,程序可能会崩溃或出现错误结果,所以需要我们去处理这些异常,让程序能更稳健地运行。

假设我们要写一个程序,从键盘读取一个整数,然后计算 10 除以这个整数的结果。

import java.util.Scanner;public class ExceptionExample {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("请输入一个整数:");int num = scanner.nextInt();int result = 10 / num;System.out.println("10 除以 " + num + " 的结果是:" + result);}
}

如果用户输入 0,就会出现除数为零的异常(ArithmeticException),程序会中断并报错。

为了处理这个异常,我们可以这样修改代码:

import java.util.Scanner;public class ExceptionExample {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);try {System.out.print("请输入一个整数:");int num = scanner.nextInt();int result = 10 / num;System.out.println("10 除以 " + num + " 的结果是:" + result);} catch (ArithmeticException e) {System.out.println("输入的数不能为 0 哦,出现了异常:" + e.getMessage());}}
}

这里使用了try-catch结构来处理异常。try块里放可能会出现异常的代码,catch块用来捕获并处理特定类型的异常(这里是ArithmeticException)。当用户输入 0 时,程序不会崩溃,而是会输出我们在catch块里设置的提示信息:“输入的数不能为 0 哦,出现了异常:/by zero”。

除了这种基本的异常处理,还有finally块(无论是否发生异常,都会执行)、多个catch块处理不同类型的异常、自定义异常等更复杂的用法,目的都是为了让程序在遇到意外情况时能更友好地处理,而不是直接崩溃。

三种类型的异常:

  • 检查性异常:这些异常是程序在编译时编译器会检查的异常。它们通常表示程序在正常运行时可能会遇到的外部错误,但程序本身无法控制,不过可以提前做好处理。这类异常通常是因为外部资源不可用用户输入错误等引起的。如果不处理这些异常,程序将无法编译通过。
  • 运行时异常:运行时异常是在程序运行过程中可能发生的异常,但不需要在编译时进行强制处理。它们通常是由程序逻辑错误导致的,比如数组越界空指针引用除数为零等。这些异常通常是因为代码编写不当,应该在编写代码时尽量避免。
  • 错误:错误表示程序在运行时发生的严重问题,通常是超出了程序的控制范围,比如虚拟机错误内存不足栈溢出等。一般情况下,程序不应该去捕获或处理这些错误,因为它们通常是无法恢复的。

异常体系结构

Java 把异常当作对象来处理,并定义一个基类 java.lang.Throwable 作为所有异常的超类。

Java API 中已经定义了许多异常类型,这些异常类分为两大类,错误 Error 和异常 Exception


Java异常处理机制


处理异常


自定义异常


总结


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/869272.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL基础 数据库表的增删改

Mysql 数加科技整理 一、原理定义概念 定义数据库(Database)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库。 数据库是长期储存在计算机内、有组织的、可共享的数据集合。分类: ​ 非结构化数据: ​ 数据相对来讲没有固定的特点,这种数据非常不便于…

加入我们|申请成为亚马逊云科技 Community Builder,共建云端社区!

亚马逊云科技 Community Builder 项目为开发者社区中的技术爱好者和新兴思想领袖提供技术资源、学习和交流机会,帮助开发者探索、分享技术相关知识,并与亚马逊云科技产品团队、技术专家和更多开发者社区成员建立紧密联系。亚马逊云科技开发者社区为开发者们提供全球的开发技术…

[ARC070E] NarrowRectangles

前言 模拟赛 \(\rm{T4}\) , 不会比较正常, 仅仅只是记录做法 然后就是还有每日一练 思路 首先是朴素的 \(\rm{dp}\) 令 \(f_{i, j}\) 表示考虑到第 \(i\) 行, 其中这一行的左端点位置为 \(j\) 的最优花费 容易写出转移 \[f_{i, j} \gets \min_{k \in [j - len_{i - 1}, j + len…

PDF Automation文档页面自动化工具

PDF Automation是我用VB6开发的一个PDF文档页面自动化工具。电脑必须安装了Adobe Acrobat才能使用该工具。软件的主要功能包括:文档的拆分 文档的合并 页面的删除 页面的移动 页面的插入等。 软件界面正中央的区域是文档列表,也就是多个PDF文档,最右侧是页面列表,显示当前所…

not_the_same_3dsctf_2016 1

打开ida能看到栈溢出,返回地址填到get_secret函数里面,可以看到get_secret函数是直接读取了flag的,现在就需要把它输出即可。 输出我们可以利用代码里面的printf,因为printf从缓冲区打印出东西需要满足条件,比如有换行符或缓冲区已满或程序正常退出。 这里我们用exit让程序…

JS-35 数组方法_reverse()

reverse方法用于颠倒排列数组元素,返回改变后的数组。注意,该方法将改变原数组 var a =[a,b,c]; a.reverse()//["c","b","a"];

FastGPT及大模型API(Docker)私有化部署指南

本文提供了FastGPT及其相关大模型API的Docker私有化部署指南,旨在简化部署流程并降低设备配置要求。文章重点介绍了优化后的部署配置、推荐使用的部署容器以及部署步骤,确保用户能够在不影响FastGPT功能的前提下,以高效的资源利用实现快速部署。1. **部署优化**:本文首先指…

LCT

1 概述 首先我们需要知道一类问题,在这类问题中我们需要维护一个森林,支持加边和删边操作,然后要求维护树上的一些信息。这类问题称为动态树问题。 而 LCT,即 Link-Cut Tree,就是用于解决动态树问题的一种数据结构。 学习 LCT 之前需要对 Splay 这种平衡树有一定了解,当然…

git整体使用流程

一、场景说明本地有文件 想在github创建一个远程仓库 在本地修改,同时同步到远端二、流程设置用户名和邮箱目的:标识每次提交者的身份 设置全局用户名:git config --global user.name "Your Name" 设置全局邮箱:git config --global user.email "your.email…

【Linux性能】Linux 下利用 Valgrind 进行内存调试

一、概述 Valgrind 是一个开源的内存调试和性能分析工具,用于帮助开发者找出程序中的内存错误,如内存泄漏、使用未初始化的内存、非法内存访问等问题。它在 Linux 平台上广泛使用,并且支持下多种处理器架构。 二、Valgrind 的使用 2.1 基本格式 valgrind --tool=memcheck -–…

C#/.NET/.NET Core技术前沿周刊 | 第 21 期(2025年1.6-1.12)

前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。欢迎投稿、推荐或自荐优质文章、项目、学习资源等…

26. 文件操作

一、数据读写在 PySide6 中对文件和文件夹的进行操作时,主要使用 QFile 类、QFileInfo 类和 QDir 类。我们可以在终端中使用 pip 安装 pyside6 模块。 pip install pyside6在 PySide6 窗口程序对文件或者文件夹进行操作时,不强制要求必须使用 PySide6 中提供的 QFile、QDir 等…