Java第十一周作業
1.本周學習總結
1.1以你喜歡的方式(思維導圖或其他)歸納總結集合相關內容。
- 關鍵字:
try...catch...finally
,try...catch...
,try...finally...
- Error與Exception的區別:
| - Error:指的是JVM的錯誤,在程序執行前出錯,用戶無法操作處理
| - Exception: 指的是程序執行過程中出錯,用戶可以處理 因此所謂的異常處理指的就是所有的Exception以及它的子類異常的處理。
throws和throw的區別:
| -throw:指的是方法之中人為拋出一個異常類對象,這個異常可以是自己定義的也可以是已經存在的。
| -throws:用於方法的聲明,表示此方法在調用時必須進行異常處理,如果有異常就處理異常沒有異常就正常執行。2.書面作業
本次作業題集
異常
2.1. 常用異常
結合題集題目7-1回答
2.1.1 自己以前編寫的代碼中經常出現什麽異常、需要捕獲嗎(為什麽)?應如何避免?
常出現的異常有:
- 空指向異常:NullPointerException
- 類轉換異常:ClassCastException
- 數組越界異常:ArrayIndexOutOfBoundsException
格式化異常:NumberFormatException
答:這些異常不需要捕獲,因為他們都繼承於RuntimeException
,屬於Unchecked Exception
類的異常。
避免方法:
- 在調用
String
類的equals()方法的時候可以將要對比的字符串輸入在前,eg:"!!!".equals(str);
在輸入操作的同時要多加註意數組,格式化的表達
2.1.2 什麽樣的異常要求用戶一定要使用捕獲處理?
- 屬於
checked Exception
類的異常一定要使用捕獲處理。 - 用
throws
關鍵字聲明的方法在調用時需要在被調用處進行捕獲處理。 對於自己
throw
出的異常需要進行捕獲處理2.2. 處理異常使你的程序更加健壯
題集題目7-2
2.2.1 實驗總結。並回答:怎麽樣才能讓你的程序更加健壯?
- 在程序可能出現異常的字段中進行
try...catch
異常捕獲處理,使得處理完異常之後,程序不會因為異常的出現而中斷運行。 - 在這題當中,因為輸入的可能是字符而不是數字,因此要使用
sc.next()
來作為輸入器。 - 在輸入沒有出現錯誤的同時才進行下一次輸入,否則就重新輸入,因此在for循環當中要將
i++
放在try語句中輸入操作的後面。 將可能出現錯誤的語句
data[i] = Integer.parseInt(sc.next())
進行異常捕獲處理。2.3. throw與throws
題集題目7-3
閱讀Integer.parsetInt
源代碼
2.3.1 Integer.parsetInt
一開始就有大量的拋出異常的代碼,這種做法有什麽好處?
- 好處:拋出
NumberFormatException
異常,能讓用戶知道出現異常的原因。 出現異常的原因:
1.String s = null
輸入的字符串為空
2.輸入的radix
小於Character.MIN_RADIX
或者大於Character.MAX_RADIX
3.fristChar
不是數字或者+
號,-
號。
4.輸入的s只有一個+
或者-
沒有其他數字內容
5.超過極值2.3.2 結合自己編寫的程序與3.1,分析自己編寫的方法拋出異常時一般需要傳遞給調用者一些什麽信息?
需要告訴調用者,出現異常的類型和異常的`message``
2.4. 用異常改進ArrayIntegerStack
題集題目6-3
2.4.1 結合6-3代碼,回答使用拋出異常的方式代表程序運行時出錯有什麽好處?比單純的返回錯誤值,有何優點?
- 優點:使用拋出異常的方式代表程序運行時出錯的話,程序在運行出錯的時候會直接拋出異常,使得程序中止,有便於我們找到異常,處理異常。
如果使用返回錯誤值的方法,不能夠清楚的知道程序到底是在哪個地方出現了錯誤,出現了什麽錯誤
2.4.2 如果一個方法內部的內碼拋出的是RuntimeException類型的異常,那麽方法聲明是否應該使用throws
關鍵字,如果使用throws
關鍵字聲明該方法拋出的異常,能給我們帶來什麽好處嗎?
- 不一定要使用
throws
關鍵字 - 如果該使用
throws
關鍵字聲明該方法拋出的異常,那麽就相當於把這個異常拋給被調用處進行處理,就不用在該方法當中處理異常了。 好處:將方法中產生的異常全部交給被調用處處理,那樣的話代碼會更加清晰,不會出現方法中自己處理自己出現的異常的情況。
2.5. 函數題-多種異常的捕獲
題集題目6-1
2.5.1 結合6-1代碼,回答:一個try塊中如果可能拋出多種異常,且異常之間可能有繼承關系,捕獲時需要註意些什麽?
需要註意的是,
catch()
關鍵字的使用,父類異常要在子類異常之後捕獲,否則會出現編譯錯誤。
2.5.2 一個try塊中如果可能拋出多種異常,使用Java8的多重異常捕獲語法需要註意些什麽?
子類異常的捕獲必須放在其任何一個父類異常的捕獲之前,
Exception e
異常的捕獲要放在最後,因為它是所有異常的父類。2.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));//打印數組內容
2.6.1 改正代碼,讓其可正常運行。註1:裏面有多個方法均可能拋出異常。註2:要使用finally關閉資源。
運行結果:
2.6.2 結合題集6-2
代碼,要將什麽樣操作放在finally塊?為什麽?使用finally關閉資源需要註意一些什麽?
- 要將釋放資源的操作放在
finally
塊,因為因為無論程序是否會出現異常,finally
中的語句都會執行 註意事項:釋放資源的操作有時候也會出現異常,因此必要的時候也要在
finally
塊中添加try - catch
異常捕獲處理操作。2.6.3 使用Java7中的
try-with-resources
來改寫上述代碼實現自動關閉資源。簡述這種方法有何好處?好處:
1.少了finally
語句塊,程序被簡化,不用編輯finally
2.程序自動調用close()
方法來釋放資源,因此不管try語句是否能夠正常運行,資源終將會被釋放。2.7. 面向對象設計作業-圖書館管理系統(分組完成,每組不超過3個同學)
登錄lib.jmu.edu.cn,對圖書進行搜索。然後登錄圖書館信息系統,查看我的圖書館。如果讓你實現一個圖書借閱系統,嘗試使用面向對象建模。
2.7.1 該系統的使用者有誰?
在校學生
2.7.2 主要功能模塊(不要太多)及每個模塊的負責人。下周每個人要提交自己負責的模塊代碼及運行視頻。
成員 負責模塊 呂煒彬 借圖書、查看已借圖書 余碩銘 查看個人信息、瀏覽圖書 蘇誌穎 還書、時間流逝 2.7.3 該系統的主要的類設計及類圖(可用)
2.7.4 你準備如何存儲圖書信息、解決信息、讀者信息等。
- 存儲信息:動態數組中的add()方法添加元素
- 解決信息:contains()方法在總信息中找到要處理的信息,然後訪問元素
讀者信息:ArrayList
3.碼雲及PTA
題目集:
jmu-Java-05-集合
3.1 碼雲代碼提交記錄
在碼雲的項目中,依次選擇“統計-Commits歷史-設置時間段”, 然後搜索並截圖
3.2 截圖PTA題集完成情況圖
需要有兩張圖(1. 排名圖。2.PTA提交列表圖
3.3 統計本周完成的代碼量
需要將每周的代碼統計情況融合到一張表中。
周次 | 總代碼量 | 新增代碼量 | 總文件數 | 新增文件數 |
---|---|---|---|---|
1 | 120 | 120 | 2 | 2 |
2 | 280 | 160 | 5 | 3 |
3 | 590 | 310 | 10 | 5 |
4 | 780 | 190 | 12 | 2 |
5 | 1290 | 510 | 17 | 5 |
6 | 1710 | 420 | 20 | 3 |
7 | 2513 | 803 | 24 | 4 |
8 | 2513 | 0 | 24 | 0 |
9 | 3014 | 501 | 27 | 3 |
10 | 3441 | 327 | 30 | 3 |
11 | 4121 | 680 | 37 | 7 |
Java第十一周作業