java中的异常-异常处理(try、catch、finally、throw、throws)+自定义异常
一、概述
1、java程序员在编写程序时提前编写好对异常的处理程序,在程序发生异常时就可以执行预先设定好的处理程序,处理程序执行完之后,可以继续向后执行后面的程序
2、异常处理程序是在程序执行出现异常时才执行的
二、5个关键字
1、try代码块,执行可能出现异常的代码
2、catch代码块,捕获类型匹配的异常对象并执行异常处理代码
3、finally代码块,里面包含的是必须要执行的代码
4、throws,定义一个方法时可以使用throws关键字声明,表示此方法不处理异常,而是就交给方法调用处进行处理
三、使用try和catch
try(异常类型 引用名){
异常处理代码
}
1、典例一
public static void main(String[] args) {try {// 可能会出现异常的代码int a=1;int b=0;int c=a/b;}catch (ArithmeticException e){// 异常类型 异常类型的引用变量名System.out.println("除数不能为0");// 异常处理代码}System.out.println("后面的程序");}

2、典例二:try代码块中出现异常的那一行程序后面的程序不会再被执行
public static void main(String[] args) {try {// 可能会出现异常的代码int a=1;int b=0;int c=a/b;String s="我爱吃西瓜";System.out.println(s);}catch (ArithmeticException e){// 异常类型 异常类型的引用变量名System.out.println("除数不能为0");// 异常处理代码}System.out.println("后面的程序");}

3、典例三: try代码块中如果可能出现多个异常则使用多个catch代码块去处理处理异常
public static void main(String[] args) {try {// 可能会出现异常的代码int a=1;int b=1;int c=a/b;String s=null;System.out.println(s.length());System.out.println("我爱吃西瓜");}catch (ArithmeticException e){// 异常类型 异常类型的引用变量名System.out.println("除数不能为0");// 异常处理代码}catch (NullPointerException e){System.out.println("字符串引用变量的值不能为null");}System.out.println("后面的程序");}

4、典例四: try代码块中如果不清楚会出现什么异常可以使用Exception作为异常类型去捕捉异常对象
public static void main(String[] args) {try {// 可能会出现异常的代码int a=1;int b=1;int c=a/b;String s=null;System.out.println(s.length());System.out.println("我爱吃西瓜");}catch (ArithmeticException e){// 异常类型 异常类型的引用变量名System.out.println("除数不能为0");// 异常处理代码}catch (Exception e){e.printStackTrace();// 输出异常类型和异常位置System.out.println("程序异常:"+e.getMessage());// 打印异常原因}System.out.println("后面的程序");}

注意:捕捉父类异常的cath代码块必须放在捕捉子类异常的catch代码块之前
四、使用finally
finally代码块中都是一些必须要执行的代码
finally{
必须要执行的代码
}
1、典例一:应用场景(catch代码块中可能会出现异常)
try {// 可能会出现异常的代码int a=1;int b=0;int c=a/b;System.out.println("我爱吃西瓜");}catch (ArithmeticException e){// 异常类型 异常类型的引用变量名String s=null;System.out.println(s.length());System.out.println("除数不能为0");// 异常处理代码}finally {System.out.println("最终必须要执行的代码");}System.out.println("后面的代码");

2、典例二:应用场景(必须要执行且只能放在finally代码块中的代码)
public int sum() throws IOException {FileInputStream inputStream=null;try {inputStream=new FileInputStream("E:/a.txt");}catch (FileNotFoundException f){f.printStackTrace();System.out.println("没找到文件");}finally {if (inputStream!=null){inputStream.close();System.out.println("关闭流通道");}return 100;}}

3、典例三:实际应用场景(IO读取文件时必须关闭流通道)
public static void main(String[] args) throws IOException {FileInputStream inputStream=null;try {inputStream=new FileInputStream("E:/hhh.txt");// 创建流通道inputStream.read();}catch (FileNotFoundException f){f.printStackTrace();System.out.println("找不到文件");}catch (IOException i){i.printStackTrace();System.out.println("读文件出现异常");}finally {if(inputStream!=null){inputStream.close();// inputStream不为null,关闭流通道}}}

五、使用throws
public void test throws 异常1,异常2,异常3{
代码
}
1、任何方法都可以使用throws声明异常类型,包括抽象方法
2、一个方法可以声明多个异常类型
3、调用使用了throws的方法时必须处理声明的异常,要么使用try-catch,要么继续使用throws声明
4、如果抛出的是运行期异常,不会有提示,需要查看所调用的方法结构
5、典例
public class Demo {public static void main(String[] args) {try {int res=divide(1,0);System.out.println(res);}catch (ArithmeticException a){a.printStackTrace();System.out.println("除数不能为0");}try {byte[]bytes=transform("abc");System.out.println(Arrays.toString(bytes));} catch (UnsupportedEncodingException e) {e.printStackTrace();}}// 除法运算public static int divide(int a,int b)throws ArithmeticException{// ArithmeticException 运行期异常 无提示 继承了RuntimeExceptionreturn a/b;}// 字符串转为字节数组返回public static byte[] transform(String s) throws UnsupportedEncodingException {// UnsupportedEncodingException 编译期异常 有提示 不继承RuntimeExceptionbyte[] bytes=s.getBytes("utf-8");// 指定编码格式return bytes;}
}

六、异常可以分为运行期异常和编译期异常两种
1、编译时期异常(即checked异常、受检异常):
(1)代码编译阶段,编译器就能明确当前代码可能发生XX异常
(2)并明确督促程序员提前编写处理它的的代码
(3)如果程序员没有编写对应的处理代码,编译期就会判定编译失败,从而不能生成字节码文件
(4)通常,这类异常的发生不是由程序员编写的代码引起的,例如:FileNotFoundException(文件找不到异常)
2、运行时期异常(即runtime异常、unchecked异常、非受检异常):
(1)代码编译阶段,编译器不做任何检查,无论该异常是否会发生,编译器都不会给出任何提示
(2)只有等代码运行起来并发生了XX异常,异常才能被发现
(3)通常,这类异常是由程序员的代码编写不当引起的,只要程序员编写代码稍加判断并且细心检查就可以避免
(4)java.lang.RuntimeException类及子类都是运行时异常,比如:ArrayIndexOutOfBoundsException数组下标越界异常,ClassCastException类型转换异常
七、使用throw
1、作用
在程序不满足某种条件时显示地抛出一个异常类的实例化对象,程序就不能继续向下执行
2、语法
throw new 异常类构造方法
如:throw new RunTimeException()
3、典例
public class Demo1 {public static void main(String[] args) {try {char res=checkScore(690);System.out.println(res);} catch (Exception e) {e.printStackTrace();System.out.println("程序异常:"+e.getMessage());}}/*给分数划登记100~90 A89~80 B79~0 C*/public static char checkScore(int score) throws Exception {if (score < 0 || score > 100) {throw new Exception("分数不合法");}if (score >= 90) {return 'A';} else if (score >= 80) {return 'B';} else {return 'C';}}
}

八、自定义异常
1、来源
(1)javaAPI中定义的标准异常类都是与语法相关的,比如索引越界异常、空指针异常
(2)但我们的程序有时候想要在不满足某种业务条件时以抛出异常的形式来做处理,此时就需要我们自定义一个与业务相关的异常类来表示,例如分数不合法异常(ScoreException)
public class ScoreException extends Exception{public ScoreException() {}public ScoreException(String message) {super(message);}
}
public class Demo1 {public static void main(String[] args) {try {char res=checkScore(690);System.out.println(res);} catch (ScoreException e) {e.printStackTrace();System.out.println("程序异常:"+e.getMessage());}}/*给分数划登记100~90 A89~80 B79~0 C*/public static char checkScore(int score) throws ScoreException {if (score < 0 || score > 100) {throw new ScoreException("分数不合法");}if (score >= 90) {return 'A';} else if (score >= 80) {return 'B';} else {return 'C';}}
}

相关文章:
java中的异常-异常处理(try、catch、finally、throw、throws)+自定义异常
一、概述 1、java程序员在编写程序时提前编写好对异常的处理程序,在程序发生异常时就可以执行预先设定好的处理程序,处理程序执行完之后,可以继续向后执行后面的程序 2、异常处理程序是在程序执行出现异常时才执行的 二、5个关键字 1、tr…...
深入了解反射
newInstance 可访问性限制: newInstance()方法只能调用无参的公共构造函数。如果类没有无参公共构造函数,那么newInstance()方法将无法使用。 异常处理: newInstance()方法在创建对象时会抛出受检异常InstantiationException和IllegalAcces…...
5、搭建前端项目
5.1 使用vite vue搭建 win r 打开终端 切换到你想要搭建的盘 npm init vitelatest跟着以下步骤取名即可 cd fullStackBlognpm installnpm run dev默认在 http://localhost:5173/ 下启动了 5.2 用vscode打开项目并安装需要的插件 1、删除多余的 HelloWorld.vue 文件 2、安装…...
LLM之Agent初探
Agent是什么? Agent一词起源于拉丁语中的Agere,意思是“to do”。在LLM语境下,Agent可以理解为在某种能自主理解、规划决策、执行复杂任务的智能体。 Agent并非ChatGPT升级版,它不仅告诉你“如何做”,更会帮你去做。…...
目录穿越漏洞CVE-2018-7171复现 又学到一招小技巧!!!!
还是半夜睡不着,打开靶机开始操作。今天看了文件下载和目录穿越漏洞想结合以及防御方法。半夜来进行操作一波。复现一下漏洞,这个网上的文章页比较的少!!! 开始操作起来!!! 进入到页…...
代码随想录算法训练营day41
题目:01背包理论基础、416. 分割等和子集 参考链接:代码随想录 动态规划:01背包理论基础 思路:01背包是所有背包问题的基础,第一次看到比较懵,完全不知道dp数据怎么设置。具体分析还是dp五部曲ÿ…...
从0~1开发财务软件
1.获取图形验证码接口 功能要求 1、随机生成6位字符 2、将字符生成base64位格式的图片,返回给前端 3、将生成的字符存储到redis中,用匿名身份id(clientId)作为key,验证码作为value。 clientId通过/login/getClien…...
Python实现连连看9
(2)标识选中的图片 在判断出玩家选中的是哪一张图片之后,接下来就可以标识选中的图片了,即在该选中的图片外围画矩形。代码如下所示。 FIRSTCLICK True #FIRSTCLICK是全局变量 if(click_col>0 and click_row>0) and \(no…...
项目验收总体计划书(实际项目验收原件参考Word)
测试目标:确保项目的需求分析说明书中的所有功能需求都已实现,且能正常运行;确保项目的业务流程符合用户和产品设计要求;确保项目的界面美观、风格一致、易学习、易操作、易理解。 软件全套文档过去进主页。 一、 前言 ࿰…...
C++基础与深度解析 | 异常处理 | 枚举与联合 | 嵌套类与局部类 | 嵌套名字空间与匿名名字空间 | 位域与volatile关键字
文章目录 一、异常处理二、枚举与联合三、嵌套类与局部类四、嵌套名字空间与匿名名字空间五、位域与volatile关键字 一、异常处理 异常处理用于处理程序在调用过程中的非正常行为。 传统的处理方法:传返回值表示函数调用是否正常结束。 例如,返回 0 表示…...
番外篇 | 利用华为2023最新Gold-YOLO中的Gatherand-Distribute对特征融合模块进行改进
前言:Hello大家好,我是小哥谈。论文提出一种改进的信息融合机制Gather-and-Distribute (GD) ,通过全局融合多层特征并将全局信息注入高层,以提高YOLO系列模型的信息融合能力和检测性能。通过引入MAE-style预训练方法,进一步提高模型的准确性。🌈 目录 🚀1.论文解…...
python记录之字符串
在Python中,字符串是一种非常常见且重要的数据类型,用于存储文本信息。下面,我们将对Python字符串进行深入的讲解,包括其基本操作、常见方法、格式化以及高级特性。 1. 字符串的创建 在Python中,字符串可以通过单引号…...
Elasticsearch 认证模拟题 - 15
一、题目 原索引 task1 的字段 title 字段包含单词 The,查询 the 可以查出 1200 篇文档。重建 task1 索引为 task1_new,重建后的索引, title 字段查询 the 单词,不能匹配到任何文档。 PUT task1 {"mappings": {"…...
g++ 预处理 编译 汇编 链接 命令
g 预处理 编译 汇编 链接 命令 在命令行中使用 g 预处理、编译、汇编和链接源代码文件通常遵循以下步骤: 预处理(Preprocessing):将源代码文件转换为经过预处理器处理的中间文件。 g -E source.cpp -o source.i 编译ÿ…...
计算机视觉中的low-level与 high-level任务
文章目录 low-level任务high-level任务区别联系others参考在计算机视觉领域中,low-level任务和high-level任务是两个重要的概念,他们分别涉及图像处理和分析的不同的层次。 low-level任务 low-level任务主要关注的是图像的底层特征,如颜色、纹理、边缘、形状等。通常涉及对…...
安徽京准NTP时钟系统:GPS北斗卫星授时下的生活重塑
安徽京准NTP时钟系统:GPS北斗卫星授时下的生活重塑 安徽京准NTP时钟系统:GPS北斗卫星授时下的生活重塑 时间的流逝自古以来时钟都是人类生活与活动的基础。然而,随着科技的进步,我们对时间管理和测量的方法已经发生了翻天覆地的变…...
图论第8天
685.冗余连接II 这题需要考虑两种情况: 1.两个输入 2.没有两个输入就是有成环 class Solution { public:static const int N 1005;int father[N];int n;void init(){for (int i 0; i < n; i){father[i] i;}}int find(int x){return x father[x] ? x : f…...
Python怎么配置环境变量:深度探索与实战指南
Python怎么配置环境变量:深度探索与实战指南 在Python编程的世界中,环境变量的配置是一个至关重要的步骤。它不仅影响着Python解释器的运行,还关系到各种第三方库和工具的使用。本文将带你深度探索如何配置Python的环境变量,并为…...
计网期末复习指南(六):应用层(DNS、FTP、URL、HTTP、SMTP、POP3)
前言:本系列文章旨在通过TCP/IP协议簇自下而上的梳理大致的知识点,从计算机网络体系结构出发到应用层,每一个协议层通过一篇文章进行总结,本系列正在持续更新中... 计网期末复习指南(一):计算…...
HTML做成一个炫酷跳动爱心的页面
大家好,今天制作制作一个炫酷跳动爱心的页面! 先看具体效果: 要创建一个炫酷跳动爱心的HTML页面,你可以使用HTML、CSS和JavaScript的组合。以下是一个简单的示例,它使用CSS动画和JavaScript来实现跳动效果。 首先&…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
Vue ③-生命周期 || 脚手架
生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...
相关类相关的可视化图像总结
目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系,可直观判断线性相关、非线性相关或无相关关系,点的分布密…...
