1. 程式人生 > >Java的異常處理練習題

Java的異常處理練習題

一、選擇題

1、java中用來丟擲異常的關鍵字是( )

A.try      B.catch    C.throw          D.finally

2、關於異常,下列說法正確的是( )

A. 異常是一種物件        B.一旦程式執行,異常將被建立

C.為了保證程式執行速度,要儘量避免異常控制     D.以上說法都不對

3、()類是所有異常類的父類。

A.Throwable     B.Error      C.Exception    D. AWTError

4、java語言中,下列哪一子句是異常處理的出口( )

A.try{}子句   B.catch{…}子句  C.finally{…}子句 D.以上說法都不對

5.下列程式的執行,說法錯誤的是( )

class MultiCatch

 {

   public static voidmain(String args[])

     {

       try

          {

            inta=args.length;

            int b=42/a;

            intc[]={1};

            c[42]=99;

           System.out.println(“b=”+b);

          }

      catch(ArithmeticException e)

          {

            System.out.println(“除0異常:”+e);

           }

      catch(ArrayIndexOutOfBoundsException e)

          {

            System.out.println(“陣列超越邊界異常:”+e);

            }

           }

    }

A.程式將輸出第15行的異常資訊

B.程式第10行出錯

C.程式將輸出“b=42

D.程式將輸出第19行的異常資訊

6、下列程式的執行,說法正確的是( )

class ExMulti

{

  static voidprocedure()

  {

    try

     {

      int c[]={1};

      c[42]=99;

     }

   catch(ArrayIndexOutOfBoundsException e)

     {

      System.out.println(“陣列超越界限異常:”+e);

     }

   }

    public static voidmain(String args[])

    {

      try

        {

          procedure();

          inta=args.length;

          int b=42/a;

         System.out.println(“b=”+b);

         }

      catch(ArithmeticException e)

         {

          System.out.println(“除0異常:”+e);

         }

       }

   }

A.程式只輸出第12行的異常資訊

B.程式只輸出第26行的異常資訊

C.程式將不輸出異常資訊

D.程式將輸出第12行和第26行的異常資訊

7、下面程式丟擲了一個“異常”並捕捉它。請在橫線處填入適當內容完成程式。

class TrowsDemo

{

  static voidprocedure() throws IllegalAccessExcepton

  {

    System.out.println(“inside procedure”);

   throw_______IllegalAccessException(“demo”);

  }

 public static voidmain(String args[])

   {

     try

      {

        procedure();

      }

      ___________

      {

       System.out.println(“捕獲:”+e);

      }

    }

finally語句塊中的程式碼(     )

A.總是被執行   

B.當try語句塊後面沒有catch時,finally中的程式碼才會執行

C.異常發生時才執行                         

D.異常沒有發生時才被執行

8、丟擲異常應該使用的關鍵字是(     )

A.throw         B.catch      C.finally           D.throws

9、自定義異常類時,可以繼承的類是(     )

A.Error           B.Applet          CException及其子類  D.AssertionError

10、在異常處理中,將可能丟擲異常的方法放在(     )語句塊中

A.throws               B.catch             Ctry          D.finally

11、對於try{……}catch子句的排列方式,下列正確的一項是(     )

A.子類異常在前,父類異常在後   B.父類異常在前,子類異常在後

C.只能有子類異常                              D.父類異常與子類異常不能同時出現

12、使用catch(Exception e)的好處是(     )

A.只會捕獲個別型別的異常

B.捕獲try語句塊中產生的所有型別的異常

C.忽略一些異常

D.執行一些程式

13.請問所有的異常類皆繼承哪一個類?(    )

Ajava.lang.Throwable                B.java.lang.Exception

C.java.lang.Error                     D.java.io.Exception

14.對於已經被定義過可能丟擲異常的語句,在程式設計時(      )。

A.必須使用trycatch語句處理異常,或用throw將其丟擲。

B.如果程式錯誤,必須使用 try/catch語句處理異常。

C.可以置之不理。

D.只能使用try/catch語句處理。

15.下面程式段的執行結果是什麼?(      )

  public class Foo{

   public static voidmain(String[] args){

    try{

      return;}

      finally{System.out.println("Finally");

     }

   }

  }

A.編譯能通過,但執行時會出現一個例外。  B.程式正常執行,並輸出 "Finally"

C.程式正常執行,但不輸出任何結果。 D.因為沒有catch語句塊,所以不能通過編譯。

16.下面是一些異常類的層次關係:

       java.lang.Exception

          java.lang.RuntimeException

              java.lang.IndexOutOfBoundsException

                  java.lang.ArrayIndexOutOfBoundsException

java.lang.StringIndexOutOfBoundsException

假設有一個方法X,能夠丟擲兩個異常,Array Index和String Index異常,假定方法X中沒有try-catch語句處理這些異常,下面哪個答案是正確的?(   )

A.方法X 應該宣告拋棄ArrayIndexOutOfBoundsException和StringIndexOutOfBounds-Exception。

B.如果呼叫X的方法捕獲IndexOutOfBoundsException,則ArrayIndexOutOfBounds- ExceptionStringIndexOutOfBoundsException都可以被捕獲

C.如果方法X宣告拋棄IndexOutOfBoundsException,則呼叫X的方法必須用try-catch語句捕獲。

D.方法X不能宣告拋棄異常。

17.下面的方法是一個不完整的方法,其中的方法unsafe()會丟擲一個IOException,那麼在方法的①處應加入哪條語句,才能使這個不完整的方法成為一個完整的方法?(    )

①  ____________________________

②  { if(unsafe())   {//do something…}

③    else if(safe())  {//do the other…}

④  }

A.public IOExceptionmethodName()   B.public void methodName()throw IOException

C.public void methodName()        Dpublic voidmethodName() throws IOException

18.如果下列的方法能夠正常執行,在控制檯上將不顯示什麼?(

  public void example( ){

   try{

      unsafe();

     System.out.println("Test1");

     }

   catch(SafeException e)

     {System.out.println("Test2");}

   finally{System.out.println("Test3");}

   System.out.println("Test4");

  }

A.Test 1          B Test 2          CTest 3            D Test 4

二、填空題

1、catch子句都帶一個引數,該引數是某個異常的類及其變數名,catch用該引數去與____丟擲異常 ___物件的類進行匹配。

2、java虛擬機器能自動處理____  執行 ___異常。

3、變數屬性是描述變數的作用域,按作用域分類,變數有區域性變數、類變數、方法引數和___全域性引數 ____

4、同一段程式可能產生不止一種異常。可以放置多個____ catch ____子句,其中每一種異常型別都將被檢查,第一個與之匹配的就會被執行。

5、捕獲異常要求在程式的方法中預先宣告,在呼叫方法時用try-catch-___  finally___語句捕獲並處理。

6、java語言認為那些可預料和不可預料的出錯稱為_____異常____

7、按異常處理不同可以分為執行異常、捕獲異常、宣告異常和___丟擲異常___幾種。

8、丟擲異常的程式程式碼可以是___自定義異常類或者是JDK中的某個類,還可以是JVN.

9、丟擲異常、生成異常物件都可以通過____throw_____語句實現。

10、捕獲異常的統一出口通過___finally______語句實現。

11、java語言的類庫中提供了一個_____ Throwable_____類,所有的異常都必須是它的例項或它子類的例項。

12、Throwable類有兩個子類:____ Error______類和Exception類。

13、對程式語言而言,一般有編譯錯誤和______執行______錯誤兩類。

14、一個try語句塊後必須跟___catch_______語句塊,____finally______語句塊可以沒有

15、自定義異常類必須繼承_____Exception_____類及其子類

16、異常處理機制允許根據具體的情況選擇在何處處理異常,可以在_____catch_____捕獲並處理,也可以用throws子句把他交給____呼叫棧中上層的方法 ______處理

三.簡答題

1.什麼是異常?簡述Java的異常處理機制。

答:異常是指在執行程式碼序列中產生的異常情況,換句話說異常是一個執行時的錯誤。

程式在執行時出現異常沒有相應的處理措施時,Java會自動捕獲並在異常發生處結束執行

2.系統定義的異常與使用者自定義的異常有何不同?如何使用這兩類異常?

系統定義的異常時特定情況出現的問題,而此時用來對可能遇到的問題進行處理。使用者定義的是自己覺得可能會出現問題時,需要處理的異常,這樣做可避免程式中斷或是出現未知錯誤。

3.在Java的異常處理機制中,try程式塊、catch程式塊和finally程式塊各起到什麼作用?try-catch-finally語句如何使用?

4.說明throws與throw的作用。

throw語句用在方法體內,表示丟擲異常,由方法體內的語句處理

throws語句用在方法聲明後面,表示再丟擲異常,由呼叫這個方法的上一級方法中的語句來處理

5.Throw/throws有什麼聯絡和區別?

1throws出現在方法函式頭;而throw出現在函式體;

 2throws表示出現異常的一種可能性,並不一定會發生這些異常;throw則是丟擲了異常,執行throw則一定丟擲了某種異常;

 3)兩者都是消極處理異常的方式(這裡的消極並不是說這種方式不好),只是丟擲或者可能丟擲異常,但是不會由函式去處理異常,真正的處理異常由函式的上層呼叫處理。

6.如何自定義異常類?

     答:class  異常名稱 extends Exception{}

7.談談final、finally的區別和作用         

final是全域性變數宣告的時候使用,意思是這個變數不可被修改,不可被override,一般用於宣告常量,或者系統設定的值。

finally是在try-catch-finally塊中配套使用,作用是,不管程式碼執行了try還是catch,最後一定會執行finally裡面的程式碼

8.如果try{}裡有一個return語句,那麼緊跟在這個try後的finally{}裡的程式碼會不會被執行?

finally是一定會執行的

只有程式碼中有system.exit()這一種情況才不會執行finally

因為終止了虛擬機器程序

finally會在return之前執行

如果在finally裡面有return情況會更復雜

9.Error和Exception有什麼區別?

Error類和Exception類都繼承自Throwable類。

Error的繼承關係:

java.lang.Object >java.lang.Throwable > java.lang.Error

Exception的繼承關係:

java.lang.Object >java.lang.Throwable >java.lang.Exception

Exception

1.可以是可被控制(checked) 或不可控制的(unchecked)

2.表示一個由程式設計師導致的錯誤

3.應該在應用程式級被處理

Error

1.總是不可控制的(unchecked)

2.經常用來用於表示系統錯誤或低層資源的錯誤

3.如何可能的話,應該在系統級被捕捉

10.什麼是RuntimeException?列舉至少4個RuntimeException的子類

RuntimeExceptionjava中所有執行時異常的父類,實際執行時出現的都是它的子類,看看RuntimeExceptionJava doc就可以隨便列出幾個:

1

Object x = new Integer(0);

     System.out.println((String)x);

當試圖將物件強制轉換為不是例項的子類時,丟擲該異常(ClassCastException)

2

int a=5/0;

一個整數“除以零”時,丟擲ArithmeticException異常。

3,

String s=null;

int size=s.size();

當應用程式試圖在需要物件的地方使用 null 時,丟擲NullPointerException異常

4,

"hello".indexOf(-1);

指示索引或者為負,或者超出字串的大小,丟擲StringIndexOutOfBoundsException異常

5

String[] ss=new String[-1];

如果應用程式試圖建立大小為負的陣列,則丟擲NegativeArraySizeException異常。

2.3.1 try語句 
try
語句用大括號{}指定了一段程式碼,該段程式碼可能會拋棄一個或多個例外。
2.3.2 catch
語句 
catch
語句的引數類似於方法的宣告,包括一個例外型別和一個例外物件。例外型別必須為Throwable類的子類,它指明瞭catch語句所處理的例外型別,例外物件則由執行時系統在try所指定的程式碼塊中生成並被捕獲,大括號中包含物件的處理,其中可以呼叫物件的方法。
catch
語句可以有多個,分別處理不同類的例外。Java執行時系統從上到下分別對每個catch語句處理的例外型別進行檢測,直到找到型別相匹配的catch語句為止。這裡,型別匹配指catch所處理的例外型別與生成的例外物件的型別完全一致或者是它的父類,因此,catch語句的排列順序應該是從特殊到一般。也可以用一個catch語句處理多個例外型別,這時它的例外型別引數應該是這多個例外型別的父類,程式設計中要根據具體的情況來選擇catch語句的例外處理型別。 
2.3.3 finally
語句 
try
所限定的程式碼中,當拋棄一個例外時,其後的程式碼不會被執行。通過finally語句可以指定一塊程式碼。無論try所指定的程式塊中拋棄或不拋棄例外,也無論catch語句的例外型別是否與所拋棄的例外的型別一致,finally所指定的程式碼都要被執行,它提供了統一的出口。通常在finally語句中可以進行資源的清除工作。如關閉開啟的檔案等。

3try-catch-finally程式塊的執行流程以及執行結果比較複雜。首先執行的是try語句塊中的語句,這時可能會有以下三種情況:
1
.如果try塊中所有語句正常執行完畢,那麼finally塊的居於就會被執行,這時分為以下兩種情況:
-->
如果finally塊執行順利,那麼整個try-catch-finally程式塊正常完成。
-->
如果finally塊由於原因R突然中止,那麼try-catch-finally程式塊的結局是由於原因R突然中止(completes abruptly
2
.如果try語句塊在執行過程中碰到異常V,這時又分為兩種情況進行處理:
-->
如果異常V能夠被與try相應的catchcatch到,那麼第一個catch到這個異常的catch塊(也是離try最近的一個與異常V匹配的catch塊)將被執行;這時就會有兩種執行結果:
-->
如果catch塊執行正常,那麼finally塊將會被執行,這時分為兩種情況:
-->
如果finally塊執行順利,那麼整個try-catch-finally程式塊正常完成。
-->
如果finally塊由於原因R突然中止,那麼try-catch-finally程式塊的結局是由於原因R突然中止(completes abruptly
-->
如果catch塊由於原因R突然中止,那麼finally模組將被執行,分為兩種情況:
-->
如果如果finally塊執行順利,那麼整個try-catch-finally程式塊的結局是由於原因R突然中止(completes abruptly
-->
如果finally塊由於原因S突然中止,那麼整個try-catch-finally程式塊的結局是由於原因S突然中止(completes abruptly,原因R將被拋棄。(注意,這裡就正好和我們的例子相符合,雖然我們在testEx2中使用throw e丟擲了異常,但是由於testEx2中有finally塊,而finally塊的執行結果是complete abruptly的(別小看這個用得最多的return,它也是一種導致complete abruptly的原因之一啊——後文中有關於導致complete abruptly的原因分析),所以整個try-catch-finally程式塊的結果是“complete abruptly”,所以在testEx1中呼叫testEx2時是捕捉不到testEx1中丟擲的那個異常的,而只能將finally中的return結果獲取到。如果在你的程式碼中期望通過捕捉被呼叫的下級函式的異常來給定返回值,那麼一定要注意你所呼叫的下級函式中的finally語句,它有可能會使你throw出來的異常並不能真正被上級呼叫函式可見的。當然這種情況是可以避免的,以testEx2為例:如果你一定要使用finally而且又要將catchthrowetestEx1中被捕獲到,那麼你去掉testEx2中的finally中的return就可以了。這個事情已經在OMC2.0MIB中出現過啦:伺服器的異常不能完全被反饋到客戶端。)
-->
如果異常V沒有catch塊與之匹配,那麼finally模組將被執行,分為兩種情況:
-->
如果finally塊執行順利,那麼整個try-catch-finally程式塊的結局就是由於丟擲異常V而突然中止(completes abruptly
-->
如果finally塊由於原因S突然中止,那麼整個try-catch-finally程式塊的結局是由於原因S突然中止(completes abruptly,異常V將被拋棄。
3
.如果try由於其他原因R突然中止(completes abruptly),那麼finally塊被執行,分為兩種情況:
-->
如果finally塊執行順利,那麼整個try-catch-finally程式塊的結局是由於原因R突然中止(completes abruptly
-->
如果finally塊由於原因S突然中止,那麼整個try-catch-finally程式塊的結局是由於原因S突然中止(completes abruptly,原因R將被拋棄。

相關推薦

Java異常處理練習題

一、選擇題 1、java中用來丟擲異常的關鍵字是( ) A.try      B.catch    C.throw          D.finally 2、關於異常,下列說法正確的是( ) A. 異常是一種物件        B.一旦程式執行,異常將被建立 C.為了保證

Java異常處理練習題所遇到的錯誤

異常處理練習題所遇到的錯誤 問題:try catch 在一個包含輸入的迴圈裡,catch語句塊無限迴圈執行。 一切源於這道題 數字格式異常 編寫一個程式,提示使用者讀取兩個整數,然後顯示他們的和。程式應該在輸入不正確時提示使用者再次輸入

Java 異常處理和 Log4j 配置文件

images orm 信息 not bound img source jar 下標 一、 程序錯誤 警告:黃線:Warning 錯誤:資源類:系統級(線程)/ 環境級(繪圖) 異常:編譯級:Exception 運行級:Exception -> RuntimeExc

15. Java異常處理

ace hover 避免 構造函數 裏的 width 原因 sans 克隆對象 html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,addre

java異常處理

並不是 9.png 代碼塊 可能 函數 處理異常 finall int 將不 一 異常: 是指程序運行的過程中,發生某些意外的事情,比如10除以0, 文件不存在等。 例如: pub

項目中java異常處理

tails 驗證 包含 erro csdn 拋出異常 項目 cep ble 一、java異常類介紹。 Throwable: 有兩個重要的子類:Exception(異常)和 Error(錯誤),二者都是 Java 異常處理的重要子類,各自都包含大量子類。 有一篇比較好的b

Java 異常處理

nal fbo 失敗 類定義 參數 方法 ray 接下來 語法檢查 閱讀目錄 異常的概念 異常的體系結構 Java 異常的處理機制 異常處理的基本語法 異常鏈 自定義異常 總結 回到頂部 異常的概念 異常是程序中的一些錯誤,但並不是所有的錯誤都是異常,並且錯誤有時候

實習培訓——Java異常處理(8)

如何工作 出了 我們 個數 試圖 類對象 bject epo 很多 實習培訓——Java異常處理(8) Java 異常處理 異常是程序中的一些錯誤,但並不是所有的錯誤都是異常,並且錯誤有時候是可以避免的。 比如說,你的代碼少了一個分號,那麽運行出來結果是提示是錯誤 java

Java——異常處理

上一個 分別是 類型轉換 冒號 意思 參數 ack span log 1、java提供的異常不可能預見所有的問題,所以需要自己定義異常類,必須從已有的異常類繼承,最好選擇意思相近的異常類繼承。 class MyException extends Exception{}

Java - 異常處理

一個 普通 throw oid 基類 語句 內容 推薦 出現 主要內容: * Java 異常的概念。 * Java 異常的分類。 * 異常的捕獲和處理。 Q:Java 是如何對異常進行處理的? A:Java 中定義了很多異常類,這些類對應了各種各樣可能出現的異常事

java異常處理的機制 java 架構師學習 java北京

語句 變量 point try ray 多重 span throw 創建 在Java中,異常情況分為Exception(異常)和Error(錯誤)兩大類,Java異常通常是指程序運行過程中出現的非正常情況,如用戶輸入錯誤、除數為零、需要處理的文件不存在、數組下標越界等,對於

Java入門提高篇】Day16 Java異常處理(下)

http final 自定義異常 2個 輸入 也有 推薦 錯誤 num   今天繼續講解java中的異常處理機制,主要介紹Exception家族的主要成員,自定義異常,以及異常處理的正確姿勢。 Exception家族   一圖勝千言,先來看一張圖。   Excepti

Java 異常處理的誤區和經驗總結

ORC 進一步 相關 ror final 額外 檢測 業務 清理資源 一 異常分檢測異常和非檢測異常,異常的應用情景可以概括為以下: 調用代碼不能繼續執行,需要立即終止。出現這種情況的可能性太多太多,例如服務器連接不上、參數不正確等。這些時候都適用非檢測異常,不需要調用

程序設計中關於Java 異常處理應註意的問題

異常處理 try...catch Java 異常處理初識 下面程序,雖能運行,但當數據輸入有誤時程序不能正常結束,也就是說,程序本身沒有進行異常處理。 例題001 用Java編寫程序。輸入兩個整數,輸出它們的商。 import java.util.Scanner;public class MyAd

深入理解Java異常處理機制 (籠統篇)

throw 種類型 綜合 IV 算術 其它 wid all 作用 開篇 1.異常處理(Exception Handling):   就是一種解決這一問題的機制,能夠較好地處理程序不能正常運行的情況。 2.異常(Exception):   是程序在運行時可能出現的

每日一題:Java異常處理

增加 異常處理 int throwable 邏輯 現實 inter throws 運行時 什麽是異常 在理想情況下,程序總會運行在很完美的環境中,網絡不會終端,文件一定存在,程序不會有 BUG。但是,理想很豐滿,現實很骨幹,實際生產環境中,網絡可能會中斷,文件可能會找不到,

Java異常處理總結

tst error 有一個 ror 而是 阻止 cep 行處理 編碼 一、Java 異常繼承框架 Error: Error類對象由 Java 虛擬機生成並拋出,大多數錯誤與代碼編寫者所執行的操作無關。對於設計合理的應用程序來說,即使確實發生了錯誤,本質上也不應該試圖去處理

java異常處理中的return和throw

如果把return和throw放在一起,直接會提示錯誤。"Unreachable statement"(無法被執行). 然而finally卻可以成功騙過編譯器讓兩者並存(是不是可以算是編譯器的一個小bug呢),結果是後執行的會覆蓋前者。 finally如果有return會覆蓋cat

java 異常處理之宣告丟擲異常

java 異常處理宣告丟擲異常 2.宣告丟擲異常是Java中處理異常的第二種方式 2.宣告丟擲異常是Java中處理異常的第二種方式 如果一個方法(中的語句執行時)可能生成某種異常,但是並不能確定如何處理這種異常,則此方

java 異常處理機制,throws與throw,try-catch-finally

java 異常處理機制 1.Java異常處理 2.try-catch-finally的程式流程圖 3.關鍵解讀 4.demo 5.不捕獲異常時的情況 在編寫程式時,經常要在可能出現錯誤的地方