8.1 异常
8.1.1 Java异常捕捉机制
- 把可能产生异常的代码放在try里面,catch来捕捉可能的异常。
- 可以有很多个catch,因为try可能抛出不同的错误。
try{
//可能异常的代码
}catch(Type1 id1){
//处理Type1异常的代码
}catch(Type2 id2){
//处理Type2异常的代码
}
8.1.2 异常捕捉流程
8.1.3 对异常对象的操作
1.设异常变量为e,则
- e.getMessge():显示了异常发生时,放在异常对象中的值。
- e.toString()或e:显示了异常类的名字。
- e.printStackTrace():显示异常的调用轨迹。//为处理异常提供了遍历
2.若在当前层面上需要处理,但不能做最终决定,那么将异常再度抛出,留给后面的处理。
catch(Exception e){
System.err.println("An exception was thrown");
throw e; //再度抛出
}
8.2 异常机制
Q: 如果要读取一个文件,那么他的流程为
1、打开文件
2、判断文件大小
3、分配足够内存空间
4、把文件读入内存
5、关闭文件
但我们在读文件过程中,可能出现各种各样的麻烦:文件不存在、内存不足够、文件损坏等等等…,那么我们该如何处理?
两种处理方案:
①
-
用了很多的else,if语句,将业务逻辑分隔开来,可读性降低。
-
不方便修改、添加处理方法。
②使用异常机制
try中出现问题,跳到catch处理异常。
try{
//业务逻辑
open the file;
detemine its size;
allocatee that much memory;
read the file into memory;
close the file;
//异常处理代码
}catch(fileOpenFailed){
doSomething;
}catch(sizeDeterminationFailed){
doSomething;
}........
//等等,处理5种异常。
8.2.1 异常机制的好处
清晰地分开了正常的业务逻辑代码和异常处理代码
8.2.2 异常声明
- 如果函数可能抛出异常,那么要在函数头部加以声明
void f() throws OpenException{
//…
} - 也可以声明没抛出的异常。//因为现在没抛出,也许将来会修改让他抛出。
**8.2.3 能抛出的对象 **
- 继承了Throwable的对象,//可直接创建Throwable的子类抛出
- Exception类继承了Throwable
- 常用: throw new Exception();
throw new Exception(“Help”);
8.3 流
8.3.1 流的基础类
- InputStream
- OutputStream
8.3.2 文件流
- FileInputStream
- FileOutputStream
- 实际工程较少使用
8.3.3 流过滤器
Data
- DataInputStream
- DataOutputStream
- 用以读写二进制方式表达的基本数据类型的数据。
8.4 文本输入输出
- 二进制文件采用InputStream/OutputStream
- 文本数据采用Reader/Writer