1. 程式人生 > >201621123042《java程序設計》第十次作業

201621123042《java程序設計》第十次作業

-c content 之間 exce 邏輯 src ibm 操作 思考

1. 本周學習總結

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

2. 書面作業

本次PTA作業題集異常

1. 常用異常

結合題集題目7-1回答
1.1 自己以前編寫的代碼中經常出現什麽異常、需要捕獲嗎(為什麽)?應如何避免?
答:
ArrayIndexOutOfBoundsException非法索引訪問數組
ClassCastException類型強制轉換異常
NullPointerException空指針異常,所調用的對象為null
NumberFormatException數值轉格式異常
IllegalArgumentException傳遞非法參數異常
IndexOutOfBoundsException

下標越界異常
ClassCastException NullPointerException NumberFormatException IllegalArgumentException IndexOutOfBoundsException
不需要捕獲,這些異常都是RuntimeException異常,這是程序設計的邏輯存在問題,如果想避免這些異常還需要自己寫代碼時思路和邏輯正確,語法規範。

1.2 什麽樣的異常要求用戶一定要使用捕獲處理?
答:在異常中Exception及其子類一定要捕獲,RuntimeException及其子類不需要捕獲

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

題集題目7-2
2.1 實驗總結。並回答:怎麽樣才能讓你的程序更加健壯?
答:這道題主要是在輸入不為數字時,產生異常,而且在遇到異常時需要進行i--操作。
方法:在使用Integer.parselent()方法時需要使用try-catch機制捕獲異常,來讓程序更健壯。

3. throw與throws

題集題目7-3
閱讀Integer.parsetInt源代碼
3.1Integer.parsetInt一開始就有大量的拋出異常的代碼,這種做法有什麽好處?
好處:一開始拋出的都是NumberFormateException異常,可以在出現異常時知道產生異常的原因。

技術分享圖片

技術分享圖片

3.2 結合自己編寫的程序與3.1,分析自己編寫的方法拋出異常時一般需要傳遞給調用者一些什麽信息?
答:拋出異常時需要傳遞給調用者出錯的原因,不同的錯誤原因拋出不同的錯誤。比如7-3中拋出異常的原因有begin沒有小於end,begin小於0,及end大於arr.length。

4. 用異常改進ArrayIntegerStack

題集題目6-3
4.1 結合6-3代碼,回答使用拋出異常的方式代表程序運行時出錯有什麽好處?比單純的返回錯誤值,有何優點?
答:使用拋出異常的方法不僅可以顯示錯誤類型,還可以具體實現錯誤的原因,方便使用者知道哪裏出錯如何進行修改。
例如6-3中peek方法,if(this.empty()) throw new EmptyStackException();如果為空則拋出EmptyStackException異常,這樣很方便知道棧空棧滿。

4.2 如果一個方法內部的內碼拋出的是RuntimeException類型的異常,那麽方法聲明是否應該使用throws關鍵字,如果使用throws關鍵字聲明該方法拋出的異常,能給我們帶來什麽好處嗎?
答:不需要使用throw關鍵字來聲明,因為RuntimeException是屬於Unchecked Exception,在程序運行時會進行自動檢測。
使用throw關鍵字來聲明在當異常不想使用try-catch捕獲時,就可以把異常拋給別的類或方法處理

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

題集題目6-1
5.1 結合6-1代碼,回答:一個try塊中如果可能拋出多種異常,且異常之間可能有繼承關系,捕獲時需要註意些什麽?
答:一個try塊可能拋出多個異常,而catch捕獲時需要註意捕獲的順序,子類異常要在父類異常前面,否則子類異常不會被捕獲到,在題目6-1中catch(NumberFormatException e)和catch(IllegalArgumentException e)放在前面,catch(Exception e)應放在最後。

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 改正代碼,讓其可正常運行。註1:裏面有多個方法均可能拋出異常。註2:要使用finally關閉資源。
答:技術分享圖片

6.2 結合題集6-2代碼,要將什麽樣操作放在finally塊?為什麽?使用finally關閉資源需要註意一些什麽?
答:要把一定要執行的語句放在finally塊中,因為finally無論是否異常都會執行,在使用的時候再finally語句內也要使用try-catch捕獲,因為finally塊內也有可能出現異常。

6.3 使用Java7中的try-with-resources來改寫上述代碼實現自動關閉資源。簡述這種方法有何好處?
好處:沒有使用finally塊,精簡了代碼,系統會自動關閉,不需要考慮資源關閉。

技術分享圖片

7. 面向對象設計作業-圖書館管理系統(分組完成,每組不超過3個同學)

登錄lib.jmu.edu.cn,對圖書進行搜索。然後登錄圖書館信息系統,查看我的圖書館。如果讓你實現一個圖書借閱系統,嘗試使用面向對象建模。
分組:
黃子穎 201621123045
翁華輝 201621123042
7.1 該系統的使用者有誰?
答:學生以及管理員。

7.2 主要功能模塊(不要太多)及每個模塊的負責人。下周每個人要提交自己負責的模塊代碼及運行視頻
學生:
學生註冊
學生登錄
查看書籍
借閱書籍
歸還書籍
管理員:
查看書籍
添加書籍
刪除書籍

7.3 該系統的主要的類設計及類圖(可用)
技術分享圖片

7.4 你準備如何存儲圖書信息、解決信息、讀者信息等。
答:
存儲圖書的信息使用Map鍵值對,key值放圖書,value值放圖書的數量數量。
借閱的信息也使用Map鍵值對存儲
讀者的信息使用Set集合存儲

8. 選做:使用異常改進你的購物車系統

舉1個例子說明你是如何使用異常處理機制讓你的程序變得更健壯。
說明要包含2個部分:1. 問題說明(哪裏會碰到異常)。2.解決方案(關鍵代碼)

9. 選做:使用靜態代碼掃描工具

掃描自己的購物車代碼

8.1 分析自己代碼中在規範方面出現的問題。
8.2 思考如何解決這些問題。

3.碼雲及PTA

題目集:異常

3.1. 碼雲代碼提交記錄

  • 在碼雲的項目中,依次選擇“統計-Commits歷史-設置時間段”, 然後搜索並截圖
    技術分享圖片

3.2 截圖PTA題集完成情況圖

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

技術分享圖片

技術分享圖片

3.3 統計本周完成的代碼量

需要將每周的代碼統計情況融合到一張表中。

周次 總代碼量 新增代碼量 總文件數 新增文件數
1 44 44 2 2
2 213 213 10 5
3 417 204 10 5
5 676 259 17 7
6 1071 405 24 7
7 1780 709 30 6
8 1900 120 35 5
9 2335 435 41 6
10 2767 432 48 7
11 3321 595 57 9

選做:4. 拓展

課外練習

JavaTutorial中Questions and Exercises
練習總結

課外閱讀

任選下面一篇文章閱讀,列舉出幾點自己能理解的異常處理最佳實踐。
Best Practices for Exception Handling
Exception-Handling Antipatterns Blog
The exceptions debate

選做:5.使用Java解決實際問題(考勤自動統計)

協會簽到,每次都是使用紙質簽名表進行簽到,回去後再手動統計。如果有多張簽名表,需要手動統計。現在保持紙質簽名方式不變,負責人員每次將紙質簽名表待會後手動錄入系統,這樣就可實現數據的自動統計。實現這樣的系統需包含什麽功能模塊?嘗試編碼實現?

201621123042《java程序設計》第十次作業