1. 本週學習總結

1.1 以你喜歡的方式(思維導圖或其他)歸納總結異常相關內容。

2. 書面作業

本次PTA作業題集異常

1. 常用異常

結合題集題目7-1回答

1.1 自己以前編寫的程式碼中經常出現什麼異常、需要捕獲嗎(為什麼)?應如何避免?

答:經常會出現陣列越界,不需要捕獲,因為異常屬於RuntimeException。想要避免的話在編寫的時候要注意陣列邊界等問題。

1.2 什麼樣的異常要求使用者一定要使用捕獲處理?

答:非RuntimeException異常類與子類的異常都要求使用者一定要使用捕獲處理。RuntimeException是繼承Exception類中比較特別的,因為除了RuntimeException類是unchecked之外,其他的都是checked。

然後Error和Exception都是繼承的Throwable類,Error是unchecked的。

2. 處理異常使你的程式更加健壯

題集題目7-2

2.1 實驗總結。並回答:怎麼樣才能讓你的程式更加健壯?

答:熟悉使用try-catch,然後重新輸入也需要在catch中編寫程式碼。

3. throw與throws

題集題目7-3

閱讀Integer.parsetInt原始碼

3.1 Integer.parsetInt一開始就有大量的丟擲異常的程式碼,這種做法有什麼好處?

答:丟擲異常可以讓人把精力集中在那關鍵的程式碼上,不用加各種錯誤判斷來干擾程式碼裡的邏輯,所有的問題在後面統一處理,這樣程式碼邏輯和錯誤處理分開便於維護。

3.2 結合自己編寫的程式與3.1,分析自己編寫的方法丟擲異常時一般需要傳遞給呼叫者一些什麼資訊?

答:丟擲異常時是先將異常展示出來,然後提示為什麼會出現這種異常。

4. 用異常改進ArrayIntegerStack

題集題目6-3

4.1 結合6-3程式碼,回答使用丟擲異常的方式代表程式執行時出錯有什麼好處?比單純的返回錯誤值,有何優點?

答:在6-3中使用丟擲異常的方式,當代碼執行出錯時方法立即結束並且丟擲一個異常物件。

優點:單純的返回錯誤值,就是出現異常後函式會返回一個特殊結果。我們需要對程式碼進行檢查並且對結果進行分析來知道具體發生的異常是什麼,而使用丟擲異常的方式則能夠在執行出錯時直接得到具體異常。

4.2 如果一個方法內部的內碼丟擲的是RuntimeException型別的異常,那麼方法宣告是否應該使用throws關鍵字,如果使用throws關鍵字宣告該方法丟擲的異常,能給我們帶來什麼好處嗎?

答:如果一個方法內部的內碼丟擲的是RuntimeException型別的異常,那麼方法宣告可以使用throws關鍵字,但是沒有必要使用throws關鍵字。

5. 函式題-多種異常的捕獲

題集題目6-1

5.1 結合6-1程式碼,回答:一個try塊中如果可能丟擲多種異常,且異常之間可能有繼承關係,捕獲時需要注意些什麼?

答:需要寫多個catch字句來捕獲,並且子類的異常則必須放在父類異常的前面。

5.2 一個try塊中如果可能丟擲多種異常,使用Java8的多重異常捕獲語法需要注意些什麼?

答:catch中異常不能出現繼承關係

6. 為如下程式碼加上異常處理

byte[] content = null;
FileInputStream fis = new FileInputStream("testfis.txt");
int bytesAvailabe = fis.available();//獲得該檔案可用的位元組數
if(bytesAvailabe>0){
content = new byte[bytesAvailabe];//建立可容納檔案大小的陣列
fis.read(content);//將檔案內容讀入陣列
}
System.out.println(Arrays.toString(content));//列印陣列內容

6.1改正程式碼,並增加如下功能。當找不到檔案時,需提示使用者找不到檔案xxx,請重新輸入檔名,然後嘗試重新開啟。 如果是其他異常則提示開啟或讀取檔案失敗!。

注1:裡面有多個方法均可能丟擲異常。

功能2:需要新增finally關閉檔案。無論上面的程式碼是否產生異常,總要提示關閉檔案ing。如果關閉檔案失敗,提示關閉檔案失敗!

答:

6.2結合題集6-2程式碼,要將什麼樣操作放在finally塊?為什麼?使用finally關閉資源需要注意一些什麼?

答:



讀取檔案並操作結束後關閉檔案需要提示關閉檔案ing,如果檔案關閉失敗則需要提示關閉檔案ing,並且判斷檔案是否為空。

注意:

若程式碼fis = new FileInputStream("dtestfis.txt");執行出錯,會報空指標異常,所以在finally中對 檔案 fist 是否為空進行判斷可以避免該異常。

6.3 使用Java7中的try-with-resources來改寫上述程式碼實現自動關閉資源。簡述這種方法有何好處?

答:

使用try-with-resources進行宣告,在宣告中 資源在宣告結束的時候會全部關閉,不需要再編寫finally關閉資源。

7. 面向物件設計作業(分組完成,每組不超過3個同學)

登入lib.jmu.edu.cn,對圖書進行搜尋。然後登入圖書館資訊系統,檢視我的圖書館。如果讓你實現一個圖書借閱系統,嘗試使用面向物件建模。

7.1 該系統的使用者有誰?

答:使用者有借書的使用者(程式中以學生來代替)和管理員。

7.2 主要功能模組(不要太多)

答:使用者:

  • 使用者註冊
  • 使用者登入
  • 檢視圖書
  • 借閱圖書
  • 歸還圖書

    管理員:
  • 新增圖書
  • 刪除圖書
  • 檢視圖書

7.3 該系統的主要的類設計及類圖(可用)

答:

7.4 你準備如何儲存圖書資訊、解決資訊、讀者資訊等

答:儲存圖書資訊使用Map鍵值對,key值存放圖書,value值存放數量。

借閱資訊也使用Map鍵值對儲存

讀者資訊使用Set集合儲存

3.碼雲及PTA

題目集:異常

3.1. 碼雲程式碼提交記錄

在碼雲的專案中,依次選擇“統計-Commits歷史-設定時間段”, 然後搜尋並截圖

3.2 截圖PTA題集完成情況圖

需要有兩張圖(1. 排名圖。2.PTA提交列表圖)

1.

2.

3.3 統計本週完成的程式碼量

需要將每週的程式碼統計情況融合到一張表

周次 總程式碼量 新增程式碼量 總檔案數 新增檔案數
1 0 0 0 0
2 0 0 0 0
3 125 125 2 2
4 141 141 3 3
5 674 647 13 13
6 647 647 13 13
7 695 48 14 1
8 1867 1867 25 25
9 1974 107 29 4
10 2227 253 34 5
11 2473 246 43 9