201621123010《Java程序設計》第10周學習總結


1. 本週學習總結

1.1 以你喜歡的方式(思惟導圖或其餘)概括總結異常相關內容。


2. 書面做業

本次PTA做業題集異常java

1. 經常使用異常

結合題集題目7-1回答程序員

1.1 本身之前編寫的代碼中常常出現什麼異常、須要捕獲嗎(爲何)?應如何避免?

:7-1這題中主要作的就是捕獲運行時產生的異常以及用戶主動拋出的異常;
之前編寫的代碼容易出現如下問題:數組

  1. ArrayIndexOutOfBoundsException
  2. NullPointerException
  3. ClassCastException
  4. NumberFormatException
    其中以上這些異常均不必定須要捕獲,由於這些異常都是非直接繼承自Exception類,像RunTimeException這種直接繼承自Exception類的才必須捕獲。
    避免出現這些異常的重要過程就是在編寫代碼時對各個條件都作好嚴格的審查,尤爲是邊界值,對可能輸入的參數類型要編寫代碼篩選,將不符合要求的傳入數據丟棄並作出提示告知使用者傳入的參數類型及格式。

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

:對於直接繼承自Exception類的異常,在編寫代碼的時候必需要捕獲(如RuntimeException),不然編譯不容許經過。函數


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

題集題目7-2學習

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

:本題主要作的就是使用異常處理輸入機制,於是要在將數據傳入數組的語句塊處使用try-catch語句,對可能傳入的不符合要求的數據產生的異常進行捕獲。
要使程序更加健壯,就要對程序中可能產生異常的語句加上try-catch語句對異常進行捕獲,此外還要注意傳入數據的語句塊也容易傳入不符合要求的數據,於是也常須要使用異常處理輸入機制。設計


3. throw與throws

題集題目7-3
閱讀Integer.parsetInt源代碼code

3.1 Integer.parsetInt一開始就有大量的拋出異常的代碼,這種作法有什麼好處?


源代碼如上圖,一開始便拋出大量的異常的代碼,先將對爲Null的對象拋出異常,再對進制不在最小進制二進制及最大進制三十六進制的數據對象拋出異常,這樣作的好處是能夠先把徹底不符合要求的對象進行剔除,以後再對剩下的數據作進一步的篩選判斷。orm

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
相關文章
相關標籤/搜索