当前位置:网站首页>2022-07-29 顾宇佳 学习笔记 异常处理
2022-07-29 顾宇佳 学习笔记 异常处理
2022-07-30 11:17:00 【haha姐】
异常处理
- 下标越界
- 空指针
- 类型转换异常
- 数字格式化
- 算术异常(数学异常)
编程界最大的三个异常
1.除数为0
2.IO流,没有关闭
3.停电
当一个程序出现异常时,抛异常后面的语句不再执行,类似于return的功能,终止方法的执行。
异常的体系结构
最顶级的Throwable:错误,异常
Error:正常情况下,不太可能出现,绝大多数Error都会导致程序处于一个非正常的状态下, 基本上很难恢复。在外力的作用下,不考虑。Error是Throwable的子类,它是在Java 程序处理范围之外的
Exception:在Java语言中,将程序执行中发生的不正常的情况称之为异常。Exception也是 Throwable的子类。
编译期异常:写代码的时候,抛异常。如果编译器不解决,会编译不通过
运行期异常:RuntimeException,运行时会抛异常,平时没事
自定义异常:
Java中异常机制虽然很完善,但是结合实际业务还差很多。
年龄出现负数需要自定义异常、电商搜索乱码需要自定义异常
怎么自定义异常?
- 所有的异常必须是Throwable的子类(大材小用,没必要)
- 如果要定义一个编译期异常,需要继承Exception类
- 如果要定义一个运行期异常,需要继承RuntimeException类
在一个语句块中,如果使用throw抛出一个编译期异常,就必须在方法的声明处使用throws关键字来标记异常类型。
还有一种处理方式,直接try ... catch
问题
我们为什么要手动抛异常?
因为要配合全局异常处理机制来解决问题
throw语句是可以当做方法的返回值的
在一个有返回值的方法中,如果有条件分支,一定要保证每种情况下都有返回值,哪怕是抛异常。
开发中,大部分情况下使用的都是运行期异常
异常链
一个异常被抛出去之后会继续被调用这个方法的方法捕获或抛出,异常会扩散
只要说解决异常、处理异常、捕获异常就是try ... catch
throws
如果一个方法没有捕获一个编译期异常,该方法必须使用throws来声明
(1)在方法里直接try ... catch解决
(2)在方法里抛异常给主函数,在主函数里try ... catch解决
规定:主方法里不允许继续往下抛异常
throws并不是真正的解决了异常,只是把异常抛给了下一级调用者。
面试题
面试题:throws和throw的区别
throws出现在方法的声明处,可以抛出多个异常(用逗号隔开)
finally关键字:
finally用来创建在try代码块后面执行的代码块
无论是否发生异常,finally代码块中的代码一定会执行。一班finally中的代码都是用来释放资源的。
Finally无论是否出现异常,都会执行
面试题01:try ... catch、finally执行顺序
finally永远是在最后执行的
如果在try ... catch语句中有return,
catch可以写多个异常(可以捕获多个异常)
顺序问题:先写小的,再写大的
重写的另一个规则:重写的方法不能抛出比被重写方法更大的异常类型
边栏推荐
猜你喜欢

208. 实现 Trie (前缀树)

MySQL——数据库基础

基于MySQL数据库,Redis缓存,MQ消息中间件,ES搜索引擎的高可用方案解析

Current relay JL-8GB/11/AC220V

Performance testing of API Gateway APISIX on Google Cloud T2A and T2D

ansible学习笔记01

Voltage relay h2d SRMUVS - 100 vac - 2

久经沙场的程序员居然也被某鱼的假程序员骗了,程序员之间的信任应该是最高的,他一个人毁了这种信任感

API 网关 APISIX 在Google Cloud T2A 和 T2D 的性能测试

现在报PMP还来得及参加9月的考试吗?分享敏捷全真模拟题
随机推荐
mysql分页查询倒序_【Mysql笔记】MySQL实现分页查询[通俗易懂]
idea的package没有空心
Beyond Stream Processing !第四届实时计算 Flink 挑战赛启动,49 万奖金等你来拿!
物联网技术概论:第6章
VSCode更改插件的安装位置
API 网关 APISIX 在Google Cloud T2A 和 T2D 的性能测试
Introduction to IoT Technologies: Chapter 6
Detailed explanation of @RequestBody and @ResponseBody
分布式限流 redission RRateLimiter 的使用及原理
定制.NET 6.0的依赖注入
汇编实现冒泡排序
真正懂经营管理的CIO具备哪些特质
【云筑共创】华为云携手鸿蒙,端云协同,培养创新型开发者
UE5 GAS 学习笔记 后记0
干货|语义网、Web3.0、Web3、元宇宙这些概念还傻傻分不清楚?(中)
高能产出!腾讯内部的MyCat中间件手册,理论实操齐下
听到'演员工作比工人辛苦,吃得也不如工人好?'我笑了
High energy output!Tencent's internal MyCat middleware manual, both theoretical and practical
单片机开发之ADC0808/9信号采集
Drag and drop events, dataTransfer, getBoundingClientRect



