201621123013 《Java程序設計》第10周學習總結
1. 本周學習總結
1.1 以你喜歡的方式(思維導圖或其他)歸納總結異常相關內容。
2. 書面作業
本次PTA作業題集異常
1. 常用異常
結合題集題目7-1回答
1.1 自己以前編寫的代碼中經常出現什麽異常、需要捕獲嗎(為什麽)?應如何避免?
答:
1、自己代碼中經常出現的異常:訪問數組 時出現:ArrayIndexOutOfBoundsException
還有強制轉化類型時出現的異常:ClassCastException
2、不需要捕獲。上次的異常均是RuntimeException
的子類異常,而它屬於Unchecked Exception
異常(不一定要捕獲)。
3、我們在寫代碼的時候就要多註意一下比如數組邊界,還有強轉類型的問題。
1.2 什麽樣的異常要求用戶一定要使用捕獲處理?
答:屬於CheckedException
的異常要求用戶一定要使用捕獲處理。
2. 處理異常使你的程序更加健壯
題集題目7-2
2.1 實驗總結。並回答:怎麽樣才能讓你的程序更加健壯?
答:
try{ String b = sc.next(); a[i]=Integer.parseInt(b); i++; }catch(Exception e){ System.out.println(e); }
將可能會產生異常的語句放入try中,我們在輸入非整型的字符串就會異常,catch捕獲異常。我們使用異常處理try-catch
3. throw與throws
題集題目7-3
閱讀Integer.parsetInt源代碼
3.1 Integer.parsetInt一開始就有大量的拋出異常的代碼,這種做法有什麽好處?
答:通過閱讀源代碼,可以發現拋出的異常都為NumberFormatException
,這樣可以讓用戶很快地知道產生異常的原因,不用我們自己思考出現哪種異常。
3.2 結合自己編寫的程序與3.1,分析自己編寫的方法拋出異常時一般需要傳遞給調用者一些什麽信息?
答:本題中我們拋出的異常都為IllegalArgumentException
,根據題目理解,在這三種情況下拋出異常,分別為:
1、begin>=end時。
2、begin < 0時。
3、end>arr.length時。
在異常中闡明各自異常原因,進而去尋找解決該異常的方法。
4. 用異常改進ArrayIntegerStack
題集題目6-3
4.1 結合6-3代碼,回答使用拋出異常的方式代表程序運行時出錯有什麽好處?比單純的返回錯誤值,有何優點?
答:好處:使用拋出異常的方式程序出錯時會拋出異常,終止程序,相比於單純地返回錯誤值,它能讓我們更好地知道其出錯信息,以便於我們對代碼的修改。
4.2 如果一個方法內部的內碼拋出的是RuntimeException類型的異常,那麽方法聲明是否應該使用throws關鍵字,如果使用throws關鍵字聲明該方法拋出的異常,能給我們帶來什麽好處嗎?
答:不一定要使用throws
關鍵字,因為RuntimeException
類型的異常不一定要被捕獲的。
好處:如果使用throws關鍵字聲明該方法拋出的異常,我們就不用那麽麻煩寫try-catch
去處理,可以直接終止程序。
5. 函數題-多種異常的捕獲
題集題目6-1
5.1 結合6-1代碼,回答:一個try塊中如果可能拋出多種異常,且異常之間可能有繼承關系,捕獲時需要註意些什麽?
答:註意的地方:在總結的時候有寫到,一個try塊中如果可能拋出多種異常,且異常之間可能有繼承關系時,子類異常要放在父類異常前面!
5.2 一個try塊中如果可能拋出多種異常,使用Java8的多重異常捕獲語法需要註意些什麽?
答:使用Java8的多重異常捕獲語法時,需要註意的是子類異常的捕獲必須要在任意父類之前。
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。如果關閉文件失敗,提示關閉文件失敗!
改正:
byte[] content = null;
try{
FileInputStream fis = new FileInputStream("testfis.txt");
int bytesAvailabe = fis.available();//獲得該文件可用的字節數
if(bytesAvailabe>0){
content = new byte[bytesAvailabe];//創建可容納文件大小的數組
fis.read(content);//將文件內容讀入數組
}
}catch(FileNotFoundException e| {
System.out.println(e);
}catch(IOException e){
System.out.println(e);
}
finally{
try {
fis.close();
}
}catch(Exception e){
System.out.println(e);
}
}
}
System.out.println(Arrays.toString(content));//打印數組內容
6.2 結合題集6-2代碼,要將什麽樣操作放在finally塊?為什麽?使用finally關閉資源需要註意一些什麽?
答:我們知道finally塊中的語句不管異常有沒有被捕獲,都是會執行的,因為我們肯定要有關閉資源的操作,但是在進行這個操作的時候也有可能會遇到異常,也要進行捕獲。
6.3 使用Java7中的try-with-resources來改寫上述代碼實現自動關閉資源。簡述這種方法有何好處?
答:
public class Test {
public static void main(String[] args) {
byte[] content = null;
try(FileInputStream fis = new FileInputStream("testfis.txt")){
int bytesAvailabe = fis.available();//獲得該文件可用的字節數
if(bytesAvailabe>0){
content = new byte[bytesAvailabe];//創建可容納文件大小的數組
fis.read(content);//將文件內容讀入數組
}
}catch(Exception e){
System.out.println(e);
}
System.out.println(Arrays.toString(content));
}
}
好處:使用try-with-resource
語句,會自動調用close函數,關閉資源,相比前面的代碼,更加簡潔,方便。
7. 面向對象設計作業-圖書館管理系統(分組完成,每組不超過3個同學)
登錄lib.jmu.edu.cn,對圖書進行搜索。然後登錄圖書館信息系統,查看我的圖書館。如果讓你實現一個圖書借閱系統,嘗試使用面向對象建模。
7.1 該系統的使用者有誰?
7.2 主要功能模塊(不要太多)及每個模塊的負責人。下周每個人要提交自己負責的模塊代碼及運行視頻。
7.3 該系統的主要的類設計及類圖(可用)
7.4 你準備如何存儲圖書信息、解決信息、讀者信息等。
3.碼雲及PTA
題目集:異常
3.1. 碼雲代碼提交記錄
在碼雲的項目中,依次選擇“統計-Commits歷史-設置時間段”, 然後搜索並截圖
3.2 截圖PTA題集完成情況圖
需要有兩張圖(1. 排名圖。2.PTA提交列表圖)
3.3 統計本周完成的代碼量
需要將每周的代碼統計情況融合到一張表中。
周次 | 總代碼量 | 新增代碼量 | 總文件數 | 新建文件數 |
---|---|---|---|---|
2 | 0 | 0 | 0 | 0 |
3 | 235 | 235 | 6 | 6 |
5 | 498 | 263 | 13 | 7 |
6 | 711 | 213 | 19 | 6 |
7 | 1237 | 526 | 30 | 11 |
8 | 1670 | 433 | 43 | 13 |
9 | 2352 | 682 | 61 | 18 |
10 | 2940 | 588 | 77 | 16 |
201621123013 《Java程序設計》第10周學習總結