Java之异常(上):基本异常体系
一、背景引入:
Java中的异常是指:Java程序在运行时可能出现的错误或非正常情况。例如:在程序中试图打开一个根本不存在的文件,在程序中除0等。异常是否出现:通常取决于程序的输入、程序中对象的当前状态以及程序所处的运行环境。程序抛出异常之后会对异常进行处理,异常处理将会改变程序的控制流程。出于安全性考虑:就是避免异常程序影响其他正常程序的运行,操作系统通常会将出现异常的程序强制中止,并弹出系统错误提示。
二、关于异常的案例分析:
(1)首先创建一个Test_Exception类,里面有一个关于我们的正常除法运算与输出。
package com.fs.ex;
import java.util.Scanner;
public class Test_Exception {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入被除数:");int num1=sc.nextInt();System.out.println("请输入除数:");int num2=sc.nextInt();System.out.println("计算结果如下:");System.out.println(num1+"/"+num2+"="+(num1/num2));}}
(2)比较理想的计算结果就是:我们测试输入正常的两个整数数据 。

(3) 但是所有的程序并不会如我们所预料的那样有一个正常输入情况,比如我们的用户若输入个"A"字符时:(出现了异常情况报告)

我们很明显就能发现为啥报错,是因为我们代码中:扫描的是整数类型的数据,但是我们输入的是字符类型的,肯定有问题不匹配。
注意:我们要学会看下方的报错提示,去找到确定的错误位置并去解决程序出现的问题:Exception in thread "main"(在主线程中) java.util.InputMismatchException(输入不匹配异常)。在最下方蓝色的地方表示的一般是我们自己的类里出现异常的位置。而它上面的哪些很多异常报告:应该是我们JDK里面的类的异常报错,而JDK里面代码我们肯定一般不能修改。所以还是由于我们写的类的一些地方导致类似于"蝴蝶效应"从下导致上面也跟着出现异常。然后它会告诉我们我们自己所写的类错在第几行,我们就可以点击去向上查找。
(4) 还有可能出现啥情况呢?比如我们在里面继续测试输入:"num1"是10,"num2"是0,最后也会出现报错!

这里我们又可以根据异常消息提示:发现是在Test_Exception类的第11行出现了异常,那么我们就能进行下一步的对异常进行处理 (这是我后面提到的异常的捕获与处理)。
三、异常的小结:
(1)概念:异常情况是指程序在运行时,可能由与外部系统的条件变更(与我们一厢情愿所设想的不一设)而导致程序可能会出错的情况。
(2)异常体系:(面试题常考!!)
1、Throwable类是Java语言中所有错误和异常的父类 。
(1)异常:(Exception)程序运行过程中,可以依靠程序本身解决的问题。
什么是可以靠程序本身解决的意思呢?就是如上面我们的案例虽然保了错,但是可以去修改代码解决(异常的处理)
接着异常又分为两类:
1.检查异常:
1)ClassNotFoundException:类无法加载异常
例子如下:

这时我们再改正以下就好了:

2)FileNotFoundException: 文件无法加载异常
3)IOException: IO异常
2.运行时异常:(这种异常是在我们运行之后才产生的)
1)InputMismatchException: 输入类型不匹配(前面案例展示过)。
2)ArithmeticException: 算术异常(前面案例展示过)。
3)NullPointerException:空指针异常(如下代码展示)
例子如下:

注意:"str"对象调用方法,却出现异常。原因:"str"引用指向空,因为我们是根据引用去找堆里的对象,再根据堆里的对象去调用方法,那这里我们找到"null","null"里面不可能有方法的引用指向toString()方法吧?
4)ArrayIndexOutOfBoundsException:数组下标越界异常(大家常见的异常情况,例子如下:)

5)ClassCastException:类转换异常
例如:我创建一个类:Person,再创建两个类:分别是:Student类与Teacher类,让它们去继承Person类。这时允许创建的以下几种对象情况:
package com.fs.ex;public class Test {public static void main(String[] args) {Person person1 =new Teacher();Person person2 =new Student();Teacher teacher1 = (Teacher) person1;Student student1 = (Student)person2;}
}
这样去创建对象没有任何异常情况而报错,但是如果我们改成这样:

这就是我们运行时可能出现的类型转换异常。
6)NumberFormatException: 数字格式化异常
下方举个常见例子:(将字符串转换为int类型的数据)
package com.fs.ex;
import java.util.Scanner;
public class Test_Exception {public static void main(String[] args) {String str="123";int number=Integer.parseInt(str);System.out.println("number="+number);}
}
测试结果:

但是如果我们这样写就会在运行时出现异常:

7)还有其他等等很多这里就不举例了...
(2)错误:(Error)程序运行过程中,依靠程序本身不可以解决的严重性问题。
(我们要知道整个程序的运行它不只是包含程序的异常,还有一种可能叫做错误)。
比如:我们现在内存条只有2个G,现在有一个数组要开辟3个G的内存空间,是不是肯定开不出,这不是程序的问题,这是一种错误,不是程序能够解决的,除非你去升级硬件。
相关文章:
Java之异常(上):基本异常体系
一、背景引入: Java中的异常是指:Java程序在运行时可能出现的错误或非正常情况。例如:在程序中试图打开一个根本不存在的文件,在程序中除0等。异常是否出现:通常取决于程序的输入、程序中对象的当前状态以及程序所处的…...
你的关联申请已发起,请等待企业微信的管理员确认你的申请
微信支付对接时,需要申请AppID,具体在下面的位置: 关联AppID,发起申请时,会提示这么一句话: 此时需要登录企业微信网页版,使用注册人的企业微信扫码登录进去,然后按照下面的步骤操作即可。 点击…...
.nvmrc 文件使用详解
文章目录 1. 前言2. .nvmrc 是什么3. 创建 .nvmrc 文件4. 使用 .nvmrc 文件5. 终端自动切换版本 1. 前言 当开发多个项目时,每个项目运行环境要求的 node 版本不一样,那么我们就需要给每个项目指定 node 版本,也就是通过终端执行 nvm install…...
深度学习之基于YoloV5抽烟检测系统
欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 基于YOLOv5(You Only Look Once)的抽烟检测系统可以用于实时检测图像或视频中是否存在抽烟行…...
解释器模式 (Interpreter Pattern)
定义 解释器模式(Interpreter Pattern)是一种行为型设计模式,用于定义一种语言的语法表示,并提供一个解释器来处理这种语法。这种模式用于实现语言解释器,通常用于专业领域或复杂文本处理中。在解释器模式中ÿ…...
【bug】uniapp的image组件渲染gif图,只有第一次点击的时候有动效,需要每次点击都有gif效果,已解决
前两天遇到的问题,暂时没有解决,就搁置了。 不解决又难受,还好今天解决了,记录下 需求: 两个gif图,分别代表点击之后的男生和女生,并且有两个静态的男生和女生图片 当男生静态图被点击的时候切…...
ubuntu编译sqlite3并使用
SQLite3是一种轻量级的关系型数据库管理系统,它是在C语言基础上实现的。SQLite3具有许多优点,例如: 1.灵活:它可以在多种操作系统上运行,并且可以将多个数据库文件合并成一个文件。 2.易于使用:SQLite3使用…...
【OpenCV+OCR】计算机视觉:识别图像验证码中指定颜色文字
文章目录 1. 写在前面2. 读取验证码图像3. 生成颜色掩码4. 生成黑白结果图5. OCR文字识别6. 测试结果 【作者主页】:吴秋霖 【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作! 【…...
【ROS 2 进阶-MoveIt!】MoveIt!中的关键节点
所有内容请查看:博客学习目录_Howe_xixi的博客-CSDN博客 原文档链接:Docs...
-bash: jps: command not found
背景 服务器的jdk通过yum 安装的,要用jps查询pid,提示找不到命令 yum install -y java-1.8.0-openjdk.x86_64 一、jps命令无法找到 [devhgh-tob-hsbc-dev-003 ~]$ jps -bash: jps: command not found 二、检查基础Java环境 [devhgh-tob-hsbc-dev-003 ~]…...
[CLickhouse] 学习小计
1.建表 正常按照如下语句进行建表,但会报错说缺少ORDER BY 或 PRIMARY KEY CREATE TABLE omds.a (x String COMMENT ,y String COMMENT ,z String ) ENGINE MergeTree(); 若我们仅需建一个没有主键的表,直接使用如下建表语句即可: CREATE…...
一款非常优秀的项目管理工具:进度猫(推荐)
在项目管理中,一个好的工具可以极大地提高效率。 进度猫是一款非常优秀的项目管理工具。它具有非常强大的功能,可以帮助团队更好地管理项目进度。 通过可视化的方式,将项目进度、任务分配、需求变更等全面呈现给团队成员,让团队…...
Bert学习笔记(简单入门版)
目 录 一、基础架构 二、输入部分 三、预训练:MLMNSP 3.1 MLM:掩码语言模型 3.1.1 mask模型缺点 3.1.2 mask的概率问题 3.1.3 mask代码实践 3.2 NSP 四、如何微调Bert 五、如何提升BERT下游任务表现 5.1 一般做法 5.2 如何在相同领域数据中进…...
信号功率放大器的工作原理和特点是什么
信号功率放大器是一种电子设备,用于将输入信号的功率进行放大,以达到所需的输出功率水平。它在各个领域中都有广泛的应用,包括音频放大器、射频放大器、激光功率放大器等。下面将详细介绍信号功率放大器的工作原理和特点。 工作原理ÿ…...
基于go标准分层架构项目设计实现
基于go标准分层架构项目设计实现 缘起 个人博客网址 最近主要看了两方面知识,一方面是技术相关的,如何设计一个比较好的后端架构项目代码;一方面是非技术相关的,如何写一篇好的技术文章,能够让他人读懂并有收获。因…...
原理Redis-IntSet
IntSet IntSet是Redis中set集合的一种实现方式,基于整数数组来实现,并且具备长度可变、有序等特征。 结构如下: typedef struct intset {uint32_t encoding; /* 编码方式,支持存放16位、32位、64位整数*/uint32_t length; /* 元素…...
逸学java【初级菜鸟篇】9.3 Stream流
hi,我是逸尘,一起学java吧 得益于Lambda所带来的函数式编程,引入了一个全新的Stream流概念(就是都基本使用lambda的形式)。 流处理 我们首先理解什么是流处理,它类似于sql语句,可以执行非常复…...
html页面直接使用elementui Plus时间线 + vue3
直接上效果图 案例源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script src"../js/vue3.3.8/vue.global.js"></script><link rel"styles…...
信息压缩模型在自然语言处理中的应用和探讨
信息压缩模型在自然语言处理中的应用和探讨 摘要:正文:结论:附录:摘要: 随着人工智能和深度学习的发展,自然语言处理(NLP)在信息处理中的角色变得越来越重要。然而,海量的自然语言数据为信息处理带来了挑战——更多的信息通常意味着更高的处理成本,并可能导致效率降低。为…...
新版mmdetection3d将3D bbox绘制到图像
环境信息 使用 python mmdet3d/utils/collect_env.py收集环境信息 sys.platform: linux Python: 3.7.12 | packaged by conda-forge | (default, Oct 26 2021, 06:08:21) [GCC 9.4.0] CUDA available: True numpy_random_seed: 2147483648 GPU 0,1: NVIDIA GeForce RTX 3090 …...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
Mac flutter环境搭建
一、下载flutter sdk 制作 Android 应用 | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 1、查看mac电脑处理器选择sdk 2、解压 unzip ~/Downloads/flutter_macos_arm64_3.32.2-stable.zip \ -d ~/development/ 3、添加环境变量 命令行打开配置环境变量文件 ope…...
