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

2. 書面作業
2.1. 常用異常
2.1.1 自己以前編寫的代碼中經常出現什么異常、需要捕獲嗎(為什么)?應如何避免?
之前常見的異常:

checked Expection需要捕獲,uncheckedExpection中有些需要捕獲...such as:nullpointerExpection、classcastExpection等等。
至於如何避免,這就需要我們在編寫程序時注意一下數組是否越界,空指針,強制轉換類型等各方面問題。
2.1.2 什么樣的異常要求用戶一定要使用捕獲處理?
在編譯時必須要求捕獲的異常就是checked類異常,一般除了error和RuntimeExpection這兩種異常類以及它們的子類的異常外
其它的異常一般是都是要進行捕獲處理的。
2.2. 處理異常使你的程序更加健壯
2.2.1 實驗總結。並回答:怎么樣才能讓你的程序更加健壯?

這個程序在運行時會出現兩個異常,這兩個異常全部都是出現在輸入的時候。題目中是要求我們輸入數組元素,如果
我們輸入的是非整形字符串的話,就必須要有提示異常。所以我們只需要做的就是對對應輸入進行捕獲就行。
至於如何才能讓程序更加健壯,就是要在程序中加入一些捕獲異常的操作,讓程序能夠自動處理異常,這樣的程序才會更加迎合客戶。
2.3. throw與throws
2.3.1 Integer.parsetInt一開始就有大量的拋出異常的代碼,這種做法有什么好處?
方便檢查出更多的代碼異常情況,使得代碼的可調度更加靈活,廣泛。
2.3.2 結合自己編寫的程序與3.1,分析自己編寫的方法拋出異常時一般需要傳遞給調用者一些什么信息?
源代碼如下:
public static int parseInt(String s) throws NumberFormatException {
return parseInt(s,10);
}
public static int parseInt(String s, int radix)
throws NumberFormatException {
if (s == null) {
throw new NumberFormatException("null");
}
if (radix < Character.MIN_RADIX) {
throw new NumberFormatException("radix " + radix +
" less than Character.MIN_RADIX");
}
if (radix > Character.MAX_RADIX) {
throw new NumberFormatException("radix " + radix +
" greater than Character.MAX_RADIX");
}
int result = 0;
boolean negative = false;
int i = 0, len = s.length();
int limit = -Integer.MAX_VALUE;
int multmin;
int digit;
if (len > 0) {
char firstChar = s.charAt(0);
if (firstChar < '0') { // Possible leading "+" or "-"
if (firstChar == '-') {
negative = true;
limit = Integer.MIN_VALUE;
} else if (firstChar != '+')
throw NumberFormatException.forInputString(s);
if (len == 1) // Cannot have lone "+" or "-"
throw NumberFormatException.forInputString(s);
i++;
}
multmin = limit / radix;
while (i < len) {
// Accumulating negatively avoids surprises near MAX_VALUE
digit = Character.digit(s.charAt(i++),radix);
if (digit < 0) {
throw NumberFormatException.forInputString(s);
}
if (result < multmin) {
throw NumberFormatException.forInputString(s);
}
result *= radix;
if (result < limit + digit) {
throw NumberFormatException.forInputString(s);
}
result -= digit;
}
} else {
throw NumberFormatException.forInputString(s);
}
return negative ? result : -result;
}
上述代碼只拋出一種異常——NumberFormatExpection
- s為空
- 針對s為null,輸入進制小於2或者大於36。
- 第一個字符既不是+,也不是-,還不是數字。
- 只有+或-
- 如果在后面出現了非數字字符,則Character的digit()方法會返回-1
- 出現溢出的時候
以上情況會拋出異常!!!
傳遞給調用者說明異常的原因!!!
2.4. 用異常改進ArrayIntegerStack
2.4.1 結合6-3代碼,回答使用拋出異常的方式代表程序運行時出錯有什么好處?
讓我們更加清楚的了解具體的錯誤,更加方便用戶去使用,符合客戶的使用特點,另外一個方面是程序員能夠更加有目標的去對某些程序去改進程序。
2.4.2 如果一個方法內部的內碼拋出的是RuntimeException類型的異常,那么方法聲明是否應該使用throws關鍵字,如果使用throws關鍵字聲明該方法拋出的異常,能給我們帶來什么好處嗎?
- 可以不使用throws,因為RuntimeException並不是必須捕獲的異常類。
- 通過使用throws可以省去try-catch語句的使用。
2.5. 函數題-多種異常的捕獲
2.5.1 結合6-1代碼,回答:一個try塊中如果可能拋出多種異常,且異常之間可能有繼承關系,捕獲時需要注意些什么?
如果在try塊中拋出多種異常應該注意多種異常類之間的繼承關系,必須先捕獲子類,再捕獲父類。
必須嚴格要求子類->父類的順序編寫catch塊。
2.5.2 一個try塊中如果可能拋出多種異常,使用Java8的多重異常捕獲語法需要注意些什么?
在java8中捕獲異常時,應該注意捕獲異常的順序,必須先捕獲子類,再捕獲父類。
具體回答應該是和上面的一樣。
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塊中要放入關閉資源操作,因為無論try-catch塊中程序是否執行都不影響finally塊中程序的執行,也就是說finally中操作必須執行。
關閉資源時有時候也會出錯,這時候也是需要捕獲的。
2.6.3 使用Java7中的try-with-resources來改寫上述代碼實現自動關閉資源。簡述這種方法有何好處?
代碼如下:

好處:
讓程序看上去不那么復雜,更加簡潔,大概就是這樣吧!!!
2.7. 面向對象設計作業-圖書館管理系統(分組完成,每組不超過3個同學)
登錄lib.jmu.edu.cn,對圖書進行搜索。然后登錄圖書館信息系統,查看我的圖書館。如果讓你實現一個圖書借閱系統,嘗試使用面向對象建模。
2.7.1 該系統的使用者有誰?
當然讀者啊!!!
2.7.2 主要功能模塊(不要太多)及每個模塊的負責人。

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

2.7.4 你准備如何存儲圖書信息、解決信息、讀者信息等。
采用文件來存儲信息。
3.碼雲及PTA
3.1. 碼雲代碼提交記錄

3.2 截圖PTA題集完成情況圖


3.3 統計本周完成的代碼量
| 周次 | 總代碼量 | 新增代碼量 | 總文件數 | 新增文件數 |
|---|---|---|---|---|
| 1 | 0 | 0 | 0 | 0 |
| 2 | 0 | 0 | 0 | 0 |
| 3 | 502 | 502 | 5 | 5 |
| 4 | 1102 | 600 | 8 | 3 |
| 5 | 1783 | 681 | 14 | 6 |
| 6 | 2216 | 433 | 20 | 6 |
| 7 | 2833 | 617 | 28 | 8 |
| 8 | 3146 | 313 | 33 | 5 |
| 9 | 3380 | 234 | 38 | 5 |
| 10 | 3743 | 363 | 42 | 4 |
| 11 | 4073 | 330 | 47 | 5 |
