JAVA進階 面向對象程序設計 第8周 異常處理和輸入輸出

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章