Java基础之异常
目录
- 1 异常
- 1.1 异常的概述
- 1.2 常见异常类型
- 1.3 JVM的默认处理方案
- 1.4 编译时异常的处理方式
- 1.4.1 异常处理之 try ... catch ... [kætʃ](捕获异常)
- 1.4.2 异常处理之 throws(抛出异常)
- 1.5 Throwable 的成员方法
- 1.6 编译时异常和运行时异常的区别
- 1.7 finally关键字
- 1.8 自定义异常
1 异常
1.1 异常的概述
-
异常:就是程序出现了不正常的情况

-
Error:严重问题,不需要处理
-
Exception:称为异常类,它表示程序本身可以处理的问题
-
RuntimeException:在编译期是不检查的,出现问题后,需要我们回来修改代码
-
非RuntimeException:编译期就必须处理的,否则程序不能通过编译,就更不能正常运行了
1.2 常见异常类型
- 数组索引越界异常:
ArrayIndexOutOfBoundsException - 空指针异常:
NullPointerException;直接输出没有问题,但是调用空指针的变量的功能就会报错 - 类型转换异常:
ClassCastException - 迭代器遍历没有此元素异常:
NoSuchElementException - 数学操作异常:
ArithmeticException - 数子转换异常:
NumberFormatException
1.3 JVM的默认处理方案
- 如果程序出现了问题,我们没有做任何处理,最终 JVM 会做默认处理
- 把异常的名称、异常的原因以及异常出现的位置等信息输出在控制台
- 有异常的位置程序停止运行
1.4 编译时异常的处理方式
- 如果程序出现了问题,我们需要自己来处理,有两种处理方案
- try … catch …
- throws
1.4.1 异常处理之 try … catch … [kætʃ](捕获异常)
- 格式1
try {可能出现异常的代码;
} catch (异常类名 变量名) {异常的处理代码;
} /*catch (异常类名1 变量名1) {异常的处理代码;
}*/
- 格式二
try{可能出现异常的代码;
} catch(Exception e){e.printStackTrae(); //返回异常信息
}
-
执行流程:
- 程序从 try 里面的代码开始执行
- 出现异常,会自动生成一个异常类对象,该异常对象将被提交给Java运行时系统
- 当Java运行时系统接收到异常对象时,会到 catch 中 去找匹配的异常类,找到后进行异常处理
- 执行完毕之后,程序还可以继续往下执行
-
范例
package ceshi;public class ExceptionDemo {public static void main(String[] args) {System.out.println("开始");method();System.out.println("结束");}public static void method() {try {int[] arr = {1, 2, 3};System.out.println(arr[3]); //出现异常时,会创建一个异常对象new ArrayIndexOutOfBoundsException();} catch (ArrayIndexOutOfBoundsException/Exception e) {e.printStackTrace();/*开始结束java.lang.ArrayIndexOutOfBoundsException: 3at ceshi.ExceptionDemo.method(ExceptionDemo.java:12)at ceshi.ExceptionDemo.main(ExceptionDemo.java:6)*/}}
}
1.4.2 异常处理之 throws(抛出异常)
- 格式
throws 异常类名;
- 注意:这个格式是跟在方法的括号后面的
- 编译时异常必须要进行处理,两种处理方案:try … catch… 或者 throws,如果采用 throws 这种方案,将来还是需要调用try … catch …
- 运行时异常可以不处理,出现问题后,需要我们会来改代码
package ceshi;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class ExceptionDemo {public static void main(String[] args) {System.out.println("开始");
// method();try {method2();} catch (ParseException e) {e.printStackTrace();}System.out.println("结束");}//编译时异常public static void method2() throws ParseException {String s = "2020-7-16";SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Date d = sdf.parse(s); //parse报错:ParseExceptionSystem.out.println(d); //Thu Jul 16 00:00:00 CST 2020}//运行时异常public static void method() throws Exception{int[] arr = {1,2,3};System.out.println(arr[3]);/*开始Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3at ceshi.ExceptionDemo.method(ExceptionDemo.java:28)at ceshi.ExceptionDemo.main(ExceptionDemo.java:9)*/}
}
1.5 Throwable 的成员方法
| 方法名 | 说明 |
|---|---|
| public String getMessage() | 返回此 throwable 的详细信息字符串 |
| public String toString() | 返回此可抛出的简短描述 |
| public void printStackTrace() (常用) [treɪs] | 把异常的错误信息输出在控制台 |
package ceshi;public class ExceptionDemo {public static void main(String[] args) {System.out.println("开始");method();System.out.println("结束");}public static void method() {try {int[] arr = {1, 2, 3};System.out.println(arr[3]); //出现异常时,会创建一个异常对象new ArrayIndexOutOfBoundsException();} catch (ArrayIndexOutOfBoundsException e) {//1,public String getMessage() 返回此 throwable 的详细信息字符串System.out.println(e.getMessage()); //Index 3 out of bounds for length 3//2,public String toString() 返回此可抛出的简短描述System.out.println(e.toString()); //java.lang.ArrayIndexOutOfBoundsException: 3//3,public void printStackTrace() (常用) 把异常的错误信息输出在控制台e.printStackTrace();/*java.lang.ArrayIndexOutOfBoundsException: 3at ceshi.ExceptionDemo.method(ExceptionDemo.java:12)at ceshi.ExceptionDemo.main(ExceptionDemo.java:6)*/}}
}
1.6 编译时异常和运行时异常的区别
- Java中的异常被分为两大类:编译时异常和运行时异常,也被称为受检异常和非受检异常
- 运行时异常就是运行时才报错,编译时异常就是编译时有红线报错
- RuntimeException类及其子类(运行时异常):无需显示处理,也可以和编译时异常一样处理
- 其余异常(编译时异常):必须显示处理,否则程序就会发生错误,无法通过编译(有可能会出现异常,并不是一定会出现)
1.7 finally关键字
- 用在捕获处理的异常格式中,放在最后面
- 格式
try{//可能出现异常的代码!
}catch{Exception e}{e.printStackTrace();
}finally{// 无论代码是出现异常还是正常执行,最终一定要执行这里的代码!!
}
-
finally的作用:可以在代码执行完毕后进行资源的释放操作 -
资源都是实现了
Closeable接口的,都自带close()关闭方法- try : 出现1次
- catch:出现0 - N 次(如果有finally那么 catch 可以没有)
- finally:出现0 - 1 次
1.8 自定义异常
- 格式
public class 异常类名 enxtends Exception {无参构造带参构造
}
- 异常类
package ceshi;public class ScoreException extends Exception{//自动生成无参,带参构造方法public ScoreException() { }public ScoreException(String message) {super(message);}
}
- 操作类
package ceshi;public class Teacher {public void checkScore(int score) throws ScoreException {if(score<0 || score>100) {throw new ScoreException("你给的分数有误");} else {System.out.println("成绩正常");}}
}
- 测试类
package ceshi;import java.util.Scanner;public class Demo {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入分数"); int score = sc.nextInt(); //120Teacher t = new Teacher();
// t.checkScore(score); //checkScore报错,编译时异常需要捕获try {t.checkScore(score);} catch (Exception e) {e.printStackTrace();}}
}
相关文章:
Java基础之异常
目录1 异常1.1 异常的概述1.2 常见异常类型1.3 JVM的默认处理方案1.4 编译时异常的处理方式1.4.1 异常处理之 try ... catch ... [ktʃ](捕获异常)1.4.2 异常处理之 throws(抛出异常)1.5 Throwable 的成员方法1.6 编译时异常和运行…...
感慨:大三了,未来该何去何从呢
笔者曾在十一月份通过了字节跳动的三次面试, 但是最终因为疫情原因不能满足公司的入职时间要求, 没有拿到offer。近期也是投递了大量大厂的实习岗, 但是要么已读不回, 要么明确告诉我学历至少要985硕士(天天被阿里cpu)。 说实话一…...
分账系统逻辑
一、说明 主体与业务关系方进行相关利益和支出的分配过程 使用场景: 在分销业务中,主营商户收到用户购买分销商品所支付的款项后,可以通过分账逻辑,与分销商进行佣金结算。在零售、餐饮等行业中,当销售人员完零售等…...
SpringCloud篇——什么是SpringCloud、有什么优缺点、学习顺序是什么
文章目录一、首先看官方解释二、Spring Cloud 的项目的位置三、Spring Cloud的子项目四、Spring Cloud 现状五、spring cloud 优缺点六、Spring Cloud 和 Dubbo 对比七、Spring Cloud 学习路线一、首先看官方解释 Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式…...
TCP核心机制之连接管理详解(三次握手,四次挥手)
目录 前言: 建立连接 建立连接主要两个TCP状态: 断开连接 断开连接的两个重要状态 小结: 前言: TCP是如何建立对端连接,如何断开连接,这篇文章会详细介绍。 建立连接 首先明确连接的概念:…...
前端—环境配置
前端开发建议用 Google Chrome 浏览器 vscode https://code.visualstudio.com 1、open in browser 插件:可以在 vscode 中直接运行查看浏览器效果 2、Live Server 插件:可以使代码修改浏览器页面实时刷新。 用户代码片段 … JavaScript 与 TypeScri…...
大学生常用python变量和简单的数据类型、可迭代对象、for循环的3用法
文章目录变量和简单的数据类型下划线开头的对象删除内存中的对象列表与元组debug三酷猫钓鱼记录实际POS机小条打印使用循环找乌龟可迭代对象📗理解一📘理解二2️⃣什么是迭代器✔️注意3️⃣迭代器对象4️⃣有关迭代的函数for循环的3用法🌸I …...
Java集合:Map的使用
1.Map框架l----Map:双列数据,存储key-value对的数据 ---类似于高中的函数: y f(x)|----HashMap:作为Map的主要实现类, 线程不安全的,效率高;可以存储null的key和value|----LinkedHashMap:保证在遍历map元素时,可以按照…...
【Datawhale图机器学习】第一章图机器学习导论
图机器学习导论 学习路径与必读论文清单 斯坦福CS224W(子豪兄中文精讲)知识图谱实战DeepwalkNode2vecPageRankGNNGCNGragh-SAGEGINGATTrans-ETrans-R 图无处不在 图是描述关联数据的通用语言 举例 计算机网络新冠肺炎流行病学调查传播链食物链地铁图…...
window 配置深度学习环境GPU
CUDA 11.6 CUDNN Anaconda pytorch 参考网址:https://zhuanlan.zhihu.com/p/460806048 阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 (aliyun.com) 电脑信息 RTX 2060 GPU0 1. CUDA 11.6 1.1 确认信息 C:\Users\thzn>nvidia-smi (CUDA Versi…...
VS Code 用作嵌入式开发编辑器
使用 Keil MDK 进行嵌入式开发时,Keil 的编辑器相对于主流编辑器而言有些不方便,比如缺少暗色主题、缺少智能悬停感知(鼠标停在一个宏上,能自动展开最终的宏结果)、代码补全不好用等等,所以推荐使用 VS Cod…...
【Python】网络爬虫经验之谈
爬虫经验之谈对爬虫的认识网站分析技术选型JS逆向反爬机制结语近段时间,因为工作需要做一些爬虫的开发,分享一下走过的坑和实战的经验吧!对爬虫的认识 F12查看的网络请求,找到相应的接口查看一下json数据来源和构造。我爬取的网站…...
数学建模美赛【LaTeX】公式、表格、图片
数学建模美赛【LaTeX】公式、表格、图片 1 宏包 \package{ } 就是在调用宏包,对计算机实在外行的同学姑且可以理解为工具箱。 每一个宏包里都定义了一些专门的命令,通过这些命令可以实现对于一类对象(如数学公式等)的统一排版&a…...
【大数据】YARN节点标签Node Label特性
简介 YARN 的 Node-label 特性能够将不同的机器类型进行分组调度,也可以根据不同的资源要求进行分区调度。运维人员可以根据节点的特性将其分为不同的分区来满足业务多维度的使用需求。YARN的Node-label功能将很好的试用于异构集群中,可以更好地管理和调…...
C# SolidWorks二次开发 API-命令标签页的切换与按钮错乱问题
这是一个网友咨询的问题,说他想控制默认打开文件之后solidworks上方工具栏的当前激活标签页。 之前我们提到过,制作Solidworks的插件也会在上面增加一个标签页,用来放自己开发的命令,经常开发的人肯定会遇到有时候更新版本,或者标…...
ElasticSearch 7.6.1
疑问 ES为什么这么快? 全文检索 听过一个程序扫描文本的每一个单词,针对单词建立索引,并保存该单词在文本中的位置,以及出现的次数。在检索查询时候,通过建立好的索引进行查询,将索引中单词对应的文本位…...
Linux系列 操作系统安装及服务控制(笔记)
作者简介:一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页 目录 前言 一.操作系统 1.Linux系统三大类 (1)ubu…...
Linux基础 - NTP时间同步
🏡博客主页: Passerby_Wang的博客_CSDN博客-系统运维,云计算,Linux基础领域博主 🌐所属专栏:『Linux基础』 🌌上期文章: Linux基础 - DNS服务进阶 📰如觉得博主文章写的不错或对你有所帮助…...
golang 入门教程:迷你 Twitter 后端
请记住,这个项目主要是为了稍微熟悉下Golang,您可以复制架构,但该项目缺少适当的 ORM,没有适当的身份验证或授权,我完全无视中间件,也没有测试。 我将在其自己的部分中讨论所有这些问题,但重要的…...
CPP2022-30-期末模拟测试03
6-1 引用作函数形参交换两个整数 分数 5 全屏浏览题目 切换布局 作者 李廷元 单位 中国民用航空飞行学院 设计一个void类型的函数Swap,该函数有两个引用类型的参数,函数功能为实现两个整数交换的操作。 裁判测试程序样例: #include <…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...
CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...
在树莓派上添加音频输入设备的几种方法
在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...
