# zb_java0731 **Repository Path**: climpeaker/zb_java0731 ## Basic Information - **Project Name**: zb_java0731 - **Description**: 异常 - **Primary Language**: Java - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2018-07-31 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # zb_java0731 # 课堂笔记 *异常概念* *异常处理* *数据结构* ## 1 异常概念 ### 1.1 异常 异常:是程序非正常运行时产生的情况; java中的异常都是继承自 Throwable接口;// 具有了异常处理的行为能力 java中异常(广泛)分为两类:错误 Error 、异常 Exception 所有的异常都是Exception的子类; 所有的错误都是Error的子类; 课下总结:错误和异常的异同点? 异常Exception的分类: 根据编译时是否处理异常,分为: 非检查性异常和检查性异常; 费检查性异常:编译时不进行异常处理,运行时会报出异常信息; 检查性异常:编译时需要显示对异常进行检查,并需要进行异常处理之后,才能正常编译; 根据异常发生或处理的时机分为: 运行时异常和非运行时异常; 运行时异常:运行时才进行异常检查和处理;又叫做非检查性异常; 一般是RuntimeException的子类: NullPointException、IndexOutBandsException等 一般运行时异常,非检查性异常,不需要显式的进行异常处理,可以通过编码时严密的逻辑思维代码来进行避免;也就是 运行时异常【非检查性异常】可以通过编码来进行避免; 非运行时异常:不在运行时进行异常处理;又叫做检查性异常; 非运行时异常【检查性异常】要求必须在编译之前进行显示的异常处理,否则编译无法通过; ## 2 异常处理 ### 2.1 try-catch异常处理机制 语法: try{ 可能发生异常的代码语句块; }catch(发生异常的类1 变量e){ 异常处理1; }catch(发生异常的类2 变量e){ 异常处理2; }catch(发生异常的类n 变量e){ 异常处理n; }finally{ 异常处理收尾清理工作; } 流程: (1)先执行try中的语句块;如果发生了异常,则从发生异常的位置直接跳转到发生异常对应的catch部分; (2)在跳入的catch部分执行异常处理代码; (3)最终执行finally部分; 注意: (1)try语句块中从发生异常的位置后面的代码不会再被执行; (2)catch语句块可以有多个,要求被catch捕获的异常类的范围要从小到大排列;注意Exception类可以捕获所有的异常; (3)try和catch是必须保留的部分;finally部分可有可无;但是如果有finally部分,则无论是否发生异常,finally部分都会被执行;但是,如果在处理异常的catch块中,执行了 System.exit(1);则程序直接结束,不在执行finally语句块;如果有return语句需要执行,则会在执行return语句之前执行finally部分【finally部分会在return之前执行】; (4)catch部分有一个新特性,可以这样写 catch(异常类1|异常类2|异常类n) 表示这个catch语句块可以捕获的异常类型; 注意:异常类1、异常类2、异常类n之间不能够是父子类关系,只能是兄弟关系; (5)运行时异常【非检查性异常】也可以使用try-catch异常处理机制进行显式的异常处理; 好处: (1)保证程序的主流程正常执行,不会因为发生异常而中断; (2)可以异常处理机制,完成程序之间的信息传递; 代码[com.yuw.exceptiondemo.TestDriver]: 参见该类中的方法:test01~test03 ### 2.2 throws 异常处理机制 异常的第二种处理机制: 使用throws将可能发生的异常抛给上层调用者去进行处理; 语法: 访问控制修饰符 其他修饰符 返回值类型 方法名(形参列表) throws 异常类1,异常类2,异常类n{ 方法体; } 解析: 如果一直使用throws向上抛出错误,最终会有jvm来进行异常处理; 代码[com.yuw.exceptiondemo.TestDriver]: 参见该类中的方法:test04 ## 2 手动制造异常 手动抛出异常:通过throw 一个异常类的实例对象,来手动抛出一个异常,有上层调用者来进行处理; 语法: throw new 异常类(); 解析: (1)写在方法体中,主动抛出一个异常 (2)如果抛出的异常是非检查性异常,则可以不需要进行异常处理; 如果抛出的异常是检查性异常,则需要使用异常处理机制进行处理【try-catch或throws都可以】 (3)throw之后的语句不会再被执行了; 目的: 通过手动抛出异常之后,使用throws处理机制告诉上层调用者发生了异常,由上层调用者来进行处理; 代码[com.yuw.exceptiondemo.TestDriver]: 参见该类中的方法:test05 ## 2 自定义异常 通过继承Exception类来实现自定义异常类; 主要是用了多态【方法重写】 代码[]: 参见教材:P25-26 ## 2 数据结构 ### 2.1 数据结构的概念 * 1 数据结构 数据结果是数据内存中数据存储的逻辑结构。 主要分为以下几类: 集合【散列结构】、线性结构【数组、字符串、链表、队列、栈】【线性关系】、树结构【层级关系】、图结构【网状关系】 课下作业: 用java语言实现图的最短路径的求法; 用java语言实现栈、队列、线性表的操作【采用面向对象的编程】 #### 参与贡献 1. Fork 本项目 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 码云特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目 5. 码云官方提供的使用手册 [http://git.mydoc.io/](http://git.mydoc.io/) 6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)