Java中的異常處理詳解 – JAVA編程語言程序開發技術文章

異常處理的課堂筆記,希望對大傢有用。
 轉載的時候請註明出處:http://blog.csdn.net/javaeeteacher 謝謝!!!!
1、什麼是異常處理
異常:程序在運行過程中的一些特殊情況,例如:內存不夠用,文件找不到,對象是Null,數組下標越界。當產生這些特殊情況的時候,可能會造成程序不能正常運行。


異常處理:讓程序在發生異常的時候能夠正常執行。


2、異常分類
檢查性異常,必須處理,如果不處理,編譯不能通過。


非檢查性異常,可以不處理,但是一旦發生,程序就不能繼續運行。


3、對於非檢查性異常
雖然編譯的時候不會報錯,能夠運行。但是運行的時候,如果發生錯誤,後果很嚴重。所以還是要處理。可以通過增加代碼來解決。


例子:對於NullPointerException,在調用方法之前可以檢查這個對象是否為null


if(date!=null){


   date.getTime();


}


例子:a/b(b為0產生異常),代碼中可以檢查b是否為0


if(b!=0)


   a/b;


else


   // 拋出異常!


 也可以采用try-catch進行處理。


 4、try…catch對異常處理


準備工作:在進行異常處理之前,必須清楚可能會發生哪些異常,異常與要調用的方法有關,通常在方法的定義中通過throws聲明可能發生的異常。


把可能產生異常的代碼放在try語句中;


針對每種可能出現的異常,編寫一個catch,catch中寫出異常類型;


在catch對應的代碼中編寫對異常進行處理的代碼,當異常產生並與當前異常類型匹配,將執行catch中的代碼。


基本結構:


try{


   // 可能產生異常的代碼


}catch(異常類型 異常對象){


   // 異常產生時候的處理代碼


}


 


註意:


每種類型的異常都必須有對應的catch,所有的異常都應該處理。


可以使用某個父類異常匹配多個子類異常。例如:catch(Exception e){}


如果異常類型之間有繼承關系,子類一定要在前面。


如果希望某個變量在try和catch中都可以使用,則應該把變量的定義放在try語句之前。


 


例子:


package ch11;


 


import java.io.IOException;


 


public class Test {


 


       public static void main(String[] args) {


              String str1 = new String(“111a”);


              str1 = “22”;


              String str2 = “456”;


              // 把可能產生異常的代碼寫在try語句中


              try{


                     int x = Integer.parseInt(str1);


                     int y = Integer.parseInt(str2);


                     System.in.read();


                     // 當產生異常的時候,try語句中異常代碼之後的代碼不會執行


                     System.out.println(x+y);


                     // return ;


              }catch(NumberFormatException e){ // 根據可能會出現的異常,寫Catch,每種


 


類型的異常可以寫一個Catch,Catch可以有多個,可以用父類異常匹配多個子類異常


                     // 如果多個Catch中的異常類型有繼承關系,子類要寫在前面


                     // 如果匹配上某種類型的異常,將執行catch中的代碼


                     System.out.println(e.getMessage());


                     System.out.println(“———————————“);


                     System.out.println(e.toString());


                     System.out.println(“———————————“);


                     e.printStackTrace();


              }catch(IOException e){


                    


              }


              // 如果try語句沒有給出catch,則必須給出finally,不管是否產生異常,


 


finally中代碼都將執行,如果給出catch,也可以給出finally


              finally{


                     System.out.println(“程序繼續運行!”);


              }


             


              //System.out.println(new Test().check());


       }


      


       public boolean check() throws IOException{


              String str = “adasf”;


              System.in.read();


              int a = Integer.parseInt(str);


 


              return true;


       }


 


}


 


5、獲取異常信息
當產生異常的時候,會匹配上某個catch,系統會把異常對象賦值給catch中的變量,在catch代碼塊中可以訪問異常信息,通過如下方法:


getMessage() 得到異常的最簡單的描述


toString() 得到比較詳細的異常信息


printStackTrace() 會把異常信息輸出在默認的輸出設備中。


例如:


try{


   // 可能產生異常的代碼


}catch(Exception e){


   System.out.println(e.toString());


   System.out.println(e.getMessage());


   e.printStackTrace();


}


 


6、finally
如果希望某些代碼一定執行,不管是否發生異常,可以把這些代碼放在finally中,與try一起使用,


 


基本結構


try{


  // 代碼塊


}catch(異常1 e1){


 


}catch(異常2 e2){


 


}finally{


   // 一定要執行的代碼


}


 


即使在try或者catch中有return語句,finally也一定會執行,在return之前執行。


 


7、

發佈留言