目录

异常的引入

异常的分类

五个关键字

try

catch

finally

throw

throws

throw 和throws的区别

处理异常的方式

自定义异常


异常的引入

Exception:异常,就是在程序的运行过程中,发生了不正常的现象,阻止了程序的运行,我们称之为出现异常。

平时有些可能发生异常的地方可以用if-else避免,但是使用if-else堵漏洞有很多缺点:代码臃肿,业务代码和处理异常的代码混在一起,可读性差,很难堵住所有的漏洞。这样就引入了异常。try-catch体,业务代码放在try里面正常写,抛出异常和处理异常的地方交给catch。这样就区分了正常业务代码和处理异常的代码。

异常的分类

按照异常出现的时机,分为运行时异常和检查异常,运行时异常是

五个关键字

认识了异常的分类,异常里面还有五个关键字

try

catch

try-catch就是捕获异常的格式

把可能出现异常的代码放入try代码块中,然后将异常封装为对象,被catch后面的()中的那个异常对象接收,接收以后,执行catch后面()里面的代码,然后try-catch后面的代码,该怎么执行就怎么执行。

详细说一下:

(1)try中没有异常,catch中代码不执行

(2)try中有异常,catch进行捕获:

如果catch中异常类型和抛出的异常类型匹配的话,走catch中的代码,进行捕获

如果catch中异常类型和你出的异常类型不匹配的话,不走catch中的代码,没有捕获成功,程序相当于遇到异常了,中断了,后续代码不执行

注意:

(1)try中如果出现异常,然后用catch捕获成功的话,那么try中后续的代码是不会执行的

(2)如果catch捕获异常成功,那么try-catch后面的代码该执行还是执行没有影响。

finally

在使用try-catch,如何让它后面的代码必须执行呢?finally派上用场,主要将必须执行的代码放入finally中,那么这个代码无论如何一定会执行。

那么return和finally谁先执行谁后执行呢?答案是先执行finally最后执行return。

所以一般像关闭数据库连接,关闭IO流资源,关闭socket资源等会放在finally中。

throw

与try-catch组队使用,在catch内部负责抛出异常

throws

在方法体上负责向上抛出异常

throw 和throws的区别

从位置、内容和作用throw 和throws主要有以前区别:

(1)位置不同:

throw:方法内部

throws:方法的签名处,方法的声明处

(2)内容不同:

throw+异常对象(检查异常、运行时异常)

throw+异常的类型(可以多个类型,用,拼接)

(3)作用不同:

throw:异常出现的源头,制造异常

throws:在方法的声明处,告诉方法的调用者,这个方法中可能会出现我声明的这些异常,然后调用者对这个异常进行处理:要么自己处理要么再继续向外抛出异常。

处理异常的方式

(1)try-catch嵌套

public static void main(String... args) {
//检查异常try {Class.forName("com.wu.test01.Test").newInstance();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}
}

(2)多重catch

public static void main(String... args) {//检查异常try {Class.forName("com.wu.test01.Test").newInstance();} catch (InstantiationException | IllegalAccessException |ClassNotFoundException e) {e.printStackTrace();}
}

(3)方法体向上抛

public static void main(String... args)throws ClassNotFoundException, IllegalAccessException, InstantiationException {//检查异常Class.forName("com.wu.test01.Test").newInstance();
}

自定义异常

jdk给我们提供了非常多的异常类,除了这些,我们还可以自己自定义异常,供我们复杂的业务使用。像是有些框架需要统一异常格式。

继承运行时异常

public class MyException extends RuntimeException {private static final long serialVersionUID = 7640226454691274383L;public MyException() {}public MyException(String msg) {spuer(msg);}
}

也可以继承检查异常

如果继承的是运行时异常,那么在使用的时候无需额外处理

如果继承的是检查异常,那么使用的时候需要try-catch捕获或者throws向上抛

【回炉重造】—— 异常相关推荐

  1. 《回炉重造 Java 基础》——集合(容器)

    整体框架 绿色代表接口/抽象类:蓝色代表类. 主要由两大接口组成,一个是「Collection」接口,另一个是「Map」接口. 前言 以前刚开始学习「集合」的时候,由于没有好好预习,也没有学好基础知识 ...

  2. Vue回炉重造之封装防刷新考试倒计时组件

    你好,我是Vam的金豆之路,可以叫我豆哥.2019年年度博客之星.技术领域博客专家.主要领域:前端开发.我的微信是 maomin9761,有什么疑问可以加我哦,自己创建了一个微信技术交流群,可以加我邀 ...

  3. 机器人学回炉重造(1-2):各种典型机械臂的正运动学建模(标准D-H法)

    文章目录 写在前面 三连杆平面机械臂 平行四边形操作臂 闭链结构 例:平行四边形操作臂 球形臂 拟人臂 球腕 斯坦福机械臂 带球形手腕的拟人化机械臂 DLR机械臂 参考文献 写在前面 本文所有机械臂均 ...

  4. 机器人学回炉重造(5-2):关节空间规划方法——梯形加减速(与抛物线拟合的线性函数)、S型曲线规划

    文章目录 写在前面 学习代码都记录在[个人github](https://github.com/xuuyann/RobotLearningCode)上,欢迎关注~ 梯形加减速(与抛物线拟合的线性函数) ...

  5. 真人电影中的幻想生物迷墙:索尼克为什么被骂到回炉重造?

    <大侦探皮卡丘>上映在即,当网友们对着雷佳音配音的皮卡丘大呼好萌好萌时,我们仿佛又来到了大型真香现场--明明在几个月之前,当人们看到毛茸茸的大叔音皮卡丘时还每个细胞都充满了拒绝. 也有一种 ...

  6. 机器人学回炉重造(2-4):运动学奇异位型分析

    文章目录 什么是运动学奇异位型? 例子:平面二连杆机械手的奇异位型 奇异位型解耦 腕部奇异位型 手臂奇异位型 转载:6轴串联关节机器人的奇异点 参考文献 什么是运动学奇异位型? 在初步系统地了解了机器 ...

  7. Vue回炉重造之封装一个实用的人脸识别组件

    你好,我是Vam的金豆之路,可以叫我豆哥.2019年年度博客之星.技术领域博客专家.主要领域:前端开发.我的微信是 maomin9761,有什么疑问可以加我哦,自己创建了一个微信技术交流群,可以加我邀 ...

  8. 机器人学回炉重造(2-3):基本雅可比矩阵与其他雅可比矩阵

    文章目录 基本雅可比矩阵 定义 求法 其他雅可比矩阵 定义 求法 补充:几何雅可比与解析雅可比 基本雅可比矩阵 定义 用笛卡尔坐标描述线速度(linear velocity)和角速度(angular ...

  9. 回炉重造之数据结构【一】基本概念

    回炉重造之数据结构[一]绪论 文章目录 回炉重造之数据结构[一]绪论 数据结构的基本概念 基本概念和术语 数据结构的三要素 算法和算法评价 算法的基本概念 算法效率的度量 数据结构的基本概念 基本概念 ...

  10. javacript回炉重造之基础细节点

    ascript之回炉重造 var n5=2e5 2*10的五次方 0x开头十六进制 0o开头八进制 0b开头二进制 typeof 用于检测数据类型 值类型(基本类型):字符串(String).数字(N ...

最新文章

  1. Lync日常维护之四:部分管理操作
  2. jqplot学习笔记
  3. leetcode 740. 删除并获得点数(dp)
  4. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第23篇]写一个实现蒙哥马利算法的C程序
  5. 使用MetaMask实现转账交易时附带Input Data数据
  6. SLB访问日志分析:基于客户端来源和HTTP状态码的实践
  7. html中写meta会乱码,BeautifulSoup+Unicode,该死的html乱码,尽管在meta标记中指定了字符集...
  8. TcxLookupComboBox
  9. git遇到的问题解决方案
  10. 回调函数 callback
  11. 辅助进度控制的计算机软件是指,辅助进度控制的计算机软件是指以( )为核心的项目管理软件包。...
  12. 简单的关机程序(C语言)
  13. 十、Linux开发板控制LED灯设备
  14. 奈何心是安定心,命总是流浪命
  15. v3.exo是什么文件_exo是什么文件?
  16. 2021年安徽省大数据与人工智能应用竞赛本科组(省赛)
  17. Orz这个词的复杂意思[z]
  18. 【主板上各种接口和附属部件科普】
  19. [医疗信息化][DICOM教程]HL7 V3 Standard-概述-HL7 V3 Standard - A High Level Overview
  20. 停用计算机网络,如何禁用电脑上网功能

热门文章

  1. 详解Linux与Unix系统的区别与联系
  2. 从零开始部署深信服EDR
  3. 求购二手《良葛格Java JDK 5.0学习笔记》
  4. PS2 键盘 变 USB 键盘 设计图
  5. learning rate对深度模型的影响:论文阅读Cyclical Learning Rates for Training Neural Networks
  6. HaaS Lab 快速体验
  7. 中国软件企业排名(不是绝对的)
  8. MQ,如何做到削峰填谷
  9. 使用console配置线连接真机路由器
  10. 即使是昏暗的街道,也有每日照耀的月