第二阶段笔记异常与IO流摘要 -石家庄校区黑马JavaEE基础6期
异常体系&异常处理
异常概述: 本身是一种安全机制
- 不正常,我们在代码的时候出现的编译或运行时的错误, 包含了错误的类型/原因以及位置
- 常见异常:
- NullPointerException 空指针
- ArrayIndexOutOfBourbonException 索引越界
- 异常体系结构
- Throwable (所有异常的超类)
- Error 出现的不能够处理的严重问题, Throwable的子类
- Exception 出现的可以处理的问题, Throwable的子类 编译时异常
- 异常处理方式
- jvm处理异常方式
- 如果出现异常我们没有处理,jvm会帮我们进行处理,他会把异常的类型,原因,位置显示在控制台,并且终止程序,异常后面的代码就不执行了
- 自己处理
有可能出现问题的代码
} catch (异常对象 对象名, 如果有异常,怎创建这个对象名的对象) {
处理异常
}
2.try...catch...finally 语句
file:///C:/Users/ZRH/AppData/Local/YNote/data/qq8CC2F1FA720F8A5393B7A67614B8C1E2/d6945245967b44a6893b4ab70659853d/clipboard.png
标准IO流代码写法
FileWriter fileWriter = null;
try {
fileWriter = new FileWriter("a.txt");
fileWriter.write("java");
fileWriter.write("world");
System.out.println(2/0);
fileWriter.write("hellow");
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if(fileWriter!=null)
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
- try ... catch语句的执行顺序
- 首先执行try语句
- 如果发现异常,异常下面的代码就不执行,直接跳入catch语句,catch语句结束后,整个try...catch结束
- 如果没有异常,catch不再执行
- 抛出去处理 throws 异常类型
- 定义位置 方法形参后,如果跑出多个异常,可以用逗号分隔
- 作用: 不捕获异常,当发生异常时向方法外界跑出,直到最顶层的方法,最终终止程序
- 使用场景: 一般在该方法不能处理异常,或希望外界处理异常时使用
- 注意: 定义在方法上的抛出异常属于"编译时异常" , 编写代码调用该方法时, IDE会提示去处理异常
- 多个异常处理方式
- 可以使用多个try...catch语句
- 可以使用一个try,多个catch
- 多个catch之间的执行顺序
- 异常对象可以有子父类关系
- 平级之间没有顺序要求,如果有子父类,父类必须得放到最后的catch语句里
Throwable的常用方法
异常分类
- 编译时期异常,编译时就发出异常
- Exception 及其子类
- 处理方式, 编译时期必须去处理
- 运行时异常: 编译时正确, 但运行时发生的异常
RuntimeException类及其子类处理方式: 编译时期可以自由选择处理或不处理
自定义异常
- 自定义编译异常类
- 定义一个类, 继承Exception或其子类(非RuntimeException), 重写构造方法
- 自定义运行异常类
- 定义一个类,继承RuntimeException或其子类, 重写构造方法
- 使用异常类的方式
- 使用编译时异常的时
- 必须用throws在方法声明上跑出Exception及其子类类型
- 使用运行异常时
- 在方法代码中, 用throw跑出RuntimeException或其子类的对象
- throws和throw的区别:
throws: 用于抛出编译时异常, 在方法声明上使用
throw: 用于主动抛出运行时异常, 在方法中使用
递归
- 指在当前方法内调用自己的这种现象
- 递归注意事项:
- 一定要有出口,否则会内存溢出异常 StakeOverFlowError
- 递归次数不宜过多, 否则会内存溢出异常
- 举例:
file:///C:/Users/ZRH/AppData/Local/YNote/data/qq8CC2F1FA720F8A5393B7A67614B8C1E2/af9e0e8143c84c53a064eeaa4c0e64fa/clipboard.png
file:///C:/Users/ZRH/AppData/Local/YNote/data/qq8CC2F1FA720F8A5393B7A67614B8C1E2/af9e0e8143c84c53a064eeaa4c0e64fa/clipboard.png
public void show(int n) {
//出口
if(n == 0) {
return;
}
show(n-1) ;
}
----------------------------------------------------------------------------------
|
|