黑马程序员技术交流社区
标题:
石家庄校区黑马JavaEE基础6期
[打印本页]
作者:
1059472218
时间:
2018-1-4 17:29
标题:
石家庄校区黑马JavaEE基础6期
第二阶段笔记异常与IO流摘要
-石家庄校区黑马JavaEE基础6期
异常体系&异常处理
异常概述: 本身是一种安全机制
不正常,我们在代码的时候出现的编译或运行时的错误, 包含了错误的类型/原因以及位置
常见异常:
NullPointerException 空指针
ArrayIndexOutOfBourbonException 索引越界
异常体系结构
Throwable (所有异常的超类)
Error 出现的不能够处理的严重问题, Throwable的子类
Exception 出现的可以处理的问题, Throwable的子类 编译时异常
RuntimeExecption 运行时异常
异常处理方式
jvm处理异常方式
如果出现异常我们没有处理,jvm会帮我们进行处理,他会把异常的类型,原因,位置显示在控制台,并且终止程序,异常后面的代码就不执行了
自己处理
捕获处理
try...catch语句
try {
有可能出现问题的代码
} 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的常用方法
String getMessage()
返回此 throwable 的详细消息字符串。
String toString
返回此 throwable 的简短描述
void privatStackTrace()
提供编程访问由
printStackTrace()
输出的堆栈跟踪信息。
异常分类
编译时期异常,编译时就发出异常
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) ;
}
----------------------------------------------------------------------------------
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2