week10《java程序設計》做業總結

week10《java程序設計》做業總結

1. 本週學習總結

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

答::java

2. 書面做業

本次PTA做業題集異常數據庫

1. 經常使用異常

結合題集題目7-1回答數組

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

答:網絡

  • 常常出現的異常有:
    輸入類型不符NumberFormatException,數組越界ArrayIndexOutOfBoundsException,空指針NullPointerException ,強制類型轉換ClassCastException ,非法參數輸入IllegalArgumentException 。以上異常不須要捕獲,都是在運行時出現問題須要去檢查錯誤的時候纔出現的異常,屬於RuntimeException。
    其中常見的異常大都是Exception和其子類。除RuntimeException外的Exception和其子類異常是須要捕獲的,
  • 在編寫程序時,應注意條理清楚,細心細緻。出錯時,採用try-catch去捕獲異常。less

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

    答:屬於Checked Exception類型異常必定須要進行捕獲處理。Checked Exception類型異常就是除RuntimeException外的Exception和其子類異常。函數

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

題集題目7-2學習

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

答:設計

  • 實驗總結:在可能出錯的代碼放入try方塊中,當有輸入非整型字符串的時候,應讓catch捕獲異常並在catch中注意將數組的索引減一,不然系統將該索引的位置默認爲0。
try{
int value = Integer.parseInt(line);
arr[i] = value;
}
  • 使用try捕獲異常,用catch拋出關於異常的信息,便於程序的調試,使程序更健壯。

3. throw與throws

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

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

答:指針

  • 截取部分源代碼
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");
        }
  • 好處:在這裏,拋出的異常爲 NumberFormatException 。針對輸入格式不符的數據所產生異常,拋出異常的信息,提醒用戶端輸入格式有誤。包括輸入s爲null,輸入的進制數小於2,大於36等狀況進行拋出異常。

    3.2 結合本身編寫的程序與3.1,分析本身編寫的方法拋出異常時通常須要傳遞給調用者一些什麼信息?

    答:傳遞給調用者關於輸入的調用範圍是否正確,當索引開始begin>索引結尾end時,拋出begin>end的異常;當索引開始begin<0,拋出begin<0的異常;當索引結尾end大於數組長度的時候,拋出end>arr.length異常。

4. 用異常改進ArrayIntegerStack

題集題目6-3

4.1 結合6-3代碼,回答使用拋出異常的方式表明程序運行時出錯有什麼好處?比單純的返回錯誤值,有何優勢?

答:使用拋出異常的方式可讓程序在出錯的時候當即中止運行,明確地告訴使用者程序出錯的地方行數,出錯的緣由,從直觀上就能夠發現錯誤點。而使用返回錯誤值來提醒程序錯誤沒辦法想拋異常那樣直觀又明確錯誤的緣由,錯誤的位置,程序也不會由於錯誤而中止。例以下代碼,入棧操做時,若是棧滿時直接拋出FullStackException異常。

public Integer push(Integer item) throws FullStackException {
        if(item==null) {
            return null;
        }
    if(top==capacity){
      FullStackException e=new FullStackException();
      throw e;
    }
    arrStack[top]=item;
        top++;
        return item;
        
    }

4.2 若是一個方法內部的內碼拋出的是RuntimeException類型的異常,那麼方法聲明是否應該使用throws關鍵字,若是使用throws關鍵字聲明該方法拋出的異常,能給咱們帶來什麼好處嗎?

答:能夠不使用throws,RuntimeException異常是Unchecked Exception,不必定須要被捕獲,因此能夠不使用。當某個方法可能會發生異常,但不想在當前方法中處理這個異常,那麼可使用throws、throw關鍵字在方法中拋出異常。在一個方法中使用throws,能夠提早針對一些可能發生的錯誤進行預防,提醒調用者應該對發生的錯誤異常進行修正。

5. 函數題-多種異常的捕獲

題集題目6-1

5.1 結合6-1代碼,回答:一個try塊中若是可能拋出多種異常,且異常之間可能有繼承關係,捕獲時須要注意些什麼?

答:在catch中應注意子類異常必須放在父類異常前面,不然父類異常會在子類異常前先被捕捉,而子類異常catch的區塊永遠不會被執行,程序會發生編譯出錯。例如先NumberFormatException 再IllegalArgumentException 最後Exception。

5.2 一個try塊中若是可能拋出多種異常,使用Java8的多重異常捕獲語法須要注意些什麼?

答:使用多重捕獲語法,可讓代碼簡潔,但必須注意異常的繼承,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。若是關閉文件失敗,提示關閉文件失敗!
答:代碼改正後運行截圖
當輸入文件名有誤時:

從新輸入文件名後

改寫後代碼:

Scanner sc=new Scanner(System.in);     
        byte[] content = null;
        FileInputStream fis =null;
        
        while(true){
            String name=sc.next();
            try{
                 fis = new FileInputStream(name);
            
            int bytesAvailabe = fis.available();//得到該文件可用的字節數
            if(bytesAvailabe>0){
                content = new byte[bytesAvailabe];//建立可容納文件大小的數組
                fis.read(content);//將文件內容讀入數組
            }
            System.out.println(Arrays.toString(content));//打印數組內容
            }catch(FileNotFoundException e){
              System.out.println("找不到文件"+name+"請從新輸入文件名");
              continue;
            }
            catch(Exception e1){
                System.out.println("打開或讀取文件失敗");
            }
            
            finally{
                if(fis!=null){
                    try{
                        fis.close();
                        System.out.println("關閉文件ing");
                    }catch(Exception e2){
                        System.out.println("關閉文件失敗");
                    }
                }
            }
            }

6.2 結合題集6-2代碼,要將什麼樣操做放在finally塊?爲何?使用finally關閉資源須要注意一些什麼?

答:在finally中釋放資源,保證佔用的資源不管如何都能被釋放,執行一些釋放資源的代碼,如關閉數據庫、關閉網絡鏈接。也能在程序發生異常,拋出異常處以後的代碼還須要被執行時,將要執行的代碼放入finally。finally區塊中的代碼不管什麼時候都會被執行。在finally中還應加入try-catch,由於finally內部也可能會發生異常,例如在資源關閉失敗的時候,執行try-catch拋出關閉失敗異常。

6.3 使用Java7中的try-with-resources來改寫上述代碼實現自動關閉資源。簡述這種方法有何好處?

答:實現自動關閉資源,即將資源放入try後的括號裏。

while(true){
                               String name=sc.next();
                try(FileInputStream fis = new FileInputStream(name)){
                int bytesAvailabe = fis.available();//得到該文件可用的字節數
                if(bytesAvailabe>0){
                    content = new byte[bytesAvailabe];//建立可容納文件大小的數組
                    fis.read(content);//將文件內容讀入數組
                }
                System.out.println(Arrays.toString(content));//打印數組內容
                }catch(FileNotFoundException e){
                  System.out.println("找不到文件"+name+"請從新輸入文件名");
                  continue;
                }
                catch(Exception e1){
                    System.out.println("打開或讀取文件失敗");
                }
                }

好處:確保資源已經被關閉,而不是在finally語句中還須要加入try-catch區塊,讓代碼簡潔流暢,再也不臃腫。

7. 面向對象設計做業-圖書館管理系統(分組完成,每組不超過3個同窗)

登陸lib.jmu.edu.cn,對圖書進行搜索。而後登陸圖書館信息系統,查看個人圖書館。若是讓你實現一個圖書借閱系統,嘗試使用面向對象建模。

7.1 該系統的使用者有誰?

答:圖書管理員,學生,教職工。

7.2 主要功能模塊(不要太多)及每一個模塊的負責人。下週每一個人要提交本身負責的模塊代碼及運行視頻。

答:主要模塊:

負責

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

答:

7.4 你準備如何存儲圖書信息、解決信息、讀者信息等。

答:能夠考慮用Set集合或文件來存儲信息。

3.碼雲及PTA

題目集:異常

3.1. 碼雲代碼提交記錄

在碼雲的項目中,依次選擇「統計-Commits歷史-設置時間段」, 而後搜索並截圖
答:

3.2 截圖PTA題集完成狀況圖

須要有兩張圖(1. 排名圖。2.PTA提交列表圖)

3.3 統計本週完成的代碼量

須要將每週的代碼統計狀況融合到一張表中。

周次 總代碼量 新增代碼量 總文件數 新增文件數
1 0 0 0 0
2 0 0 0 0
3 0 0 0 0
4 0 0 0 0
5 739 739 16 16
6 1084 345 28 12
7 1180 96 30 2
8 1627 447 35 5
9 1986 359 44 9
10 2350 364 56 12
11 2534 184 61 5
相關文章
相關標籤/搜索