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