標籤:content throw 時間段 source dex 時間 針對 物件導向 帳號密碼
1. 本周學習總結1.1 以你喜歡的方式(思維導圖或其他)歸納總結異常相關內容。
2. 書面作業
本次PTA作業題集異常
1. 常用異常
結合題集題目7-1回答
1.1 自己以前編寫的代碼中經常出現什麼異常、需要捕獲嗎(為什麼)?應如何避免?
答:7-1這題中主要做的就是捕獲運行時產生的異常以及使用者主動拋出的異常;
以前編寫的代碼容易出現以下問題:
- ArrayIndexOutOfBoundsException
- NullPointerException
- ClassCastException
- NumberFormatException
其中以上這些異常均不一定需要捕獲,因為這些異常都是非直接繼承自Exception類,像RunTimeException這種直接繼承自Exception類的才必須捕獲。
避免出現這些異常的重要過程就是在編寫代碼時對各個條件都做好嚴格的審查,尤其是邊界值,對可能輸入的參數類型要編寫代碼篩選,將不符合要求的傳入資料丟棄並做出提示告知使用者傳入的參數類型及格式。
1.2 什麼樣的異常要求使用者一定要使用捕獲處理?
答:對於直接繼承自Exception類的異常,在編寫代碼的時候必須要捕獲(如RuntimeException),否則編譯不允許通過。
2. 處理異常使你的程式更加健壯
題集題目7-2
2.1 實驗總結。並回答:怎麼樣才能讓你的程式更加健壯?
答:本題主要做的就是使用異常處理輸入機制,因而要在將資料傳入數組的語句塊處使用try-catch語句,對可能傳入的不符合要求的資料產生的異常進行捕獲。
要使程式更加健壯,就要對程式中可能產生異常的語句加上try-catch語句對異常進行捕獲,此外還要注意傳入資料的語句塊也容易傳入不符合要求的資料,因而也常需要使用異常處理輸入機制。
3. throw與throws
題集題目7-3
閱讀Integer.parsetInt原始碼
3.1
Integer.parsetInt一開始就有大量的拋出異常的代碼,這種做法有什麼好處?
原始碼如,一開始便拋出大量的異常的代碼,先將對為Null的對象拋出異常,再對進位不在最小進位二進位及最大進位三十六進位的資料對象拋出異常,這樣做的好處是可以先把完全不符合要求的對象進行剔除,之後再對剩下的資料做進一步的篩選判斷。
3.2 結合自己編寫的程式與3.1,分析自己編寫的方法拋出異常時一般需要傳遞給調用者一些什麼資訊?
答:拋出異常時應讓使用者明確知道產生的是什麼異常,以及產生異常的具體原因及位置,而不是僅僅告訴使用者有異常,但不給出具體的問題所在。
所以在編寫方法時,在拋出異常的模組處需要指明產生的是什麼樣的異常以及產生異常的具體原因及位置。
4. 用異常改進ArrayIntegerStack
題集題目6-3
4.1 結合6-3代碼,回答使用拋出異常的方式代表程式運行時出錯有什麼好處?比單純的返回錯誤值,有何優點?
答:通過使用異常處理機制拋出異常,可以讓使用者更加明確地知道操作失敗的具體類型、原因及位置等資訊;
而單純的返回null或錯誤值,就等於是告訴使用者”你執行的操作失敗了,但我不告訴你具體的失敗原因”,這樣就顯得程式比較弱小。
4.2 如果一個方法內部的內碼拋出的是RuntimeException類型的異常,那麼方法聲明是否應該使用throws關鍵字,如果使用throws關鍵字聲明該方法拋出的異常,能給我們帶來什麼好處嗎?
答:如果內碼拋出的是RuntimeException類型的異常,則方法聲明可不使用throws關鍵字。因為直接繼承Exception類的異常才必須要被捕獲。
如果是RuntimeException,則拋出異常後虛擬機器會進行處理,不需要程式員編寫try-catch語句,而非RuntimeException,則需要在編寫時自行捕獲並處理。
5. 函數題-多種異常的捕獲
題集題目6-1
5.1 結合6-1代碼,回答:一個try塊中如果可能拋出多種異常,且異常之間可能有繼承關係,捕獲時需要注意些什嗎?
答:當一個try塊中如果可能拋出多種異常,且異常之間可能有繼承關係時,若父類的捕獲語句在子類前,則由於代碼執行是按序執行的,此時優先執行父類的捕獲語句,而子類的異常繼承自父類,所以當父類的捕獲後,該異常已經無法再繼續被子類捕獲,此時便失去了子類捕獲語句的作用。
因而在捕獲時,需要注意要將子類的異常捕獲語句放置在父類的異常捕獲語句前。
5.2 一個try塊中如果可能拋出多種異常,使用Java8的多重異常捕獲文法需要注意些什嗎?
答:一個try塊中如果可能拋出多種異常,則使用Java8的多重異常捕獲文法需要注意在try塊後分別為每一種異常添加一個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關閉資源需要注意一些什嗎?
答:在try-catch語句塊後,若有無論如何都需要執行的語句,則需要放進finally語句中,如上一步的關閉檔案是無論如何都需要執行的,此外還有其他類型的資源釋放通常也需要放進finally語句塊中。
使用finally關閉資源的時候,因為關閉資源的語句也有可能會產生異常,因此也需要使用try-catch語句。
6.3 使用Java7中的
try-with-resources來改寫上述代碼實現自動關閉資源。簡述這種方法有何好處?
檔案不存在時:
檔案存在時:
在try後面加個括弧,再初始化對象的文法就叫try-with-resources,使用這種文法,則自動調用了資源的close()函數,所以程式員無需在編寫時再編寫資源的關閉釋放語句。
7. 物件導向設計作業-圖書館管理系統(分組完成,每組不超過3個同學)
登入lib.jmu.edu.cn,對圖書進行搜尋。然後登入圖書館資訊系統,查看我的圖書館。如果讓你實現一個圖書借閱系統,嘗試使用物件導向建模。
7.1 該系統的使用者有誰?
答:主要應該是兩類,一是普通使用者,二是圖書館系統的管理員。
7.2 主要功能模組(不要太多)及每個模組的負責人。下周每個人要提交自己負責的模組代碼及運行視頻。
答:
- 註冊及登陸模組,需要由登入模組的帳號名區分使用者類型。
- 針對普通使用者大致上是尋找書籍、借閱書籍;
- 針對管理員,功能為上/下架書籍。
7.3 該系統的主要的類設計及類圖(可用)
答:針對使用對象,可設計一個User類,屬性為普通使用者與管理員共有的屬性(帳號密碼等),而普通使用者類與管理員類可繼承User類,然後擴充其他屬性,此外還需要一個圖書類用於記錄圖書對象的資訊。
- 普通使用者類內部應包含尋找與借閱方法;
- 管理員類應包含上架/下架書籍方法;
- 圖書類內部應包含圖書的資訊記錄方法;
- 此外還有登陸/註冊方法
7.4 你準備如何儲存圖書資訊、解決資訊、讀者資訊等。
答:若是較為簡單的資訊,則可以使用動態數組來儲存資訊較為簡單;
若是資訊較多較複雜,則需要使用檔案來儲存各模組的資訊,當然檔案的操作也會相對複雜。
會嘗試著使用檔案來解決,若是實現有困難則會考慮選擇動態數組來處理。
3.碼雲及PTA
題目集:異常
3.1. 碼雲代碼提交記錄
- 在碼雲的項目中,依次選擇“統計-Commits曆史-設定時間段”, 然後搜尋並
3.2 PTA題集完成情況圖
需要有兩張圖(1. 排名圖。2.PTA提交列表圖)
3.3 統計本周完成的代碼量
需要將每周的代碼統計情況融合到一張表中。
| 周次 |
總代碼量 |
新增代碼量 |
總檔案數 |
新增檔案數 |
| 1 |
90 |
90 |
5 |
5 |
| 2 |
322 |
232 |
11 |
6 |
| 3 |
652 |
330 |
16 |
5 |
| 4 |
946 |
294 |
21 |
5 |
| 5 |
1347 |
401 |
26 |
5 |
| 6 |
1591 |
244 |
28 |
2 |
| 7 |
2118 |
527 |
31 |
3 |
| 8 |
2627 |
509 |
39 |
8 |
| 9 |
2912 |
285 |
42 |
3 |
| 10 |
3171 |
259 |
50 |
8 |
201621123010《Java程式設計》第10周學習總結