自測題:
1. 什么是異常?P357
異常是在程序生命周期內出現的事件,它會導致程序行為不可靠。
2. 已檢查異常和未檢查異常的區別是什么?P359
在編譯器允許程序被編譯通過前,要求程序員必須編寫代碼,告訴編譯器如何處理由特定指令產生的已檢查異常。
但是編譯器對可能產生的未檢查異常并不認為存在潛在的錯誤可能,也就不會要求程序員必須編寫代碼處理,只是希望程序員在編寫代碼時就盡量避免出現這類異常。
已檢查異常:FileNotFoundException, IOException, Exception
未檢查異常:NegativeArraySizeException, NumberFormatException, ArrayIndexOutOfBoundsException, RuntimeException
3.
a) 拋出異常:P357 每種導致異常的事件類型都對應Java中一個預定義的異常類。當出現某個事件時,Java運行環境就會判斷出現異常的類型,
并且生成一個該異常類的對象。這個過程稱為拋出(throwing)異常。
b) 聲明異常:P361 是指為給定的方法做一個標記,含義是該方法可能會生成一個異常類的對象。
c) 捕捉異常:P364 在某個位置可以控制異常對象,而不是僅僅拋出它們。在Java中,這個過程稱為捕捉異常(catching an exception)。
4. finally語句的作用是什么?P367
無論try程序塊中發生任何情況,都希望在程序終止運行前執行一些特別的指令,處理一些清理工作,因此就需要在try...catch程序塊的最后部分聲明finally程序塊。
5.
a) 不會編譯錯誤
b) Integer.parseInt()和arrayIn[posIn]會拋出異常
c) 輸入字母,導致NumberFormatException;輸入超過數組邊界的數會導致ArrayIndexOutOfBoundsException。
6. 什么情況下需要定義自己的異常類?P378,P380
從構造函數中報告錯誤的唯一方法是使用異常。但是拋出異常通用異常對象方法使程序無法通過名稱知道問題的原因,
還需要借助于getMessage方法來補充信息;并且用于處理特定異常對象的catch語句卻將捕捉所有被拋出的異常,
因為所有的異常都是從通用異常類(Exception)派生的。為了希望使用與處理構造函數異常不同的方式來處理其他異常,
因此就得創建自己的異常類。
編程練習:代碼附件
1. ExceptionQ5.java
2.
a) ScannerTester.java
b) EasyScannerPlus.java
c) EasyScannerPlusTester.java
3. Hostel.java, ObjectList.java, Payment.java, PaymentList.java, Tenant.java, TenantList.java, NegativeSizeException.java