一.什麼是異常
異常就是在程序的運行過程中所發生的不正常的事件,如所需文件找不到,網絡連接不通或中斷,算術運算出錯(如被0除),數組下標越界,裝載了一個不存在的類,對null的操作,類型轉換異常等等。那麼異常會中斷正在運行的程序。
二.異常處理
異常處理機制就像我們對平時可能會遇到的意外情況,預先想好了一些處理辦法。也就是說,在程序執行代碼的時候,萬一發生了什麼異常,程序會按照預定的處理辦法對異常進行處理,異常處理完畢後,程序繼續運行。
三.異常的分類
01.Throwable 類是 Java 語言中所有錯誤或異常的超類。它有兩個子類:Error和Exception。
02.Error:
表示僅靠程序本身無法恢復的嚴重錯誤,如內存溢出動態鏈接失敗,虛擬機錯誤。應用程序不應該拋出這種類型的對象(一般是由虛擬機拋出)。假如出現這種錯誤,除了正確使程序退出外,在其他反面是無能為力的。比如說VirtualMachineError:當 Java 虛擬機崩潰或用盡了它繼續操作所需的資源時,拋出該錯誤。
03.Exception:
有java應用程序拋出和處理的非嚴重錯誤,如所需文件找不到,網絡連接不通或中斷,算術運算出錯(如被0除),數組下標越界,裝載了一個不存在的類,對null的操作,類型轉換異常等等.
04.運行時異常:
包括RuntimeExcption及所有子類,不要求程序非要對他做出處理。
05.checked異常(非運行時異常):
除了運行時異常外的其他由Exception繼承來的異常類。程序必須捕獲或者聲明拋出這種異常,否則會出現編譯錯誤,無法通過編譯,處理方式有兩種:通過try-catch在當前位置捕獲並處理異常;通過throws聲明拋出異常,交給上一級調用方法處理。
四.異常的使用
常見異常:
01.ArrayIndexOutOfBoundsException
int[] ints = new int[] { 1, 2, 3, 4 }; try { System.out.println(ints[4]); System.out.println("我能執行到嗎?");// 發生異常以後,後面的代碼不能被執行 } catch (ArrayIndexOutOfBoundsException e) { System.out.println("數組越界錯誤"); } System.out.println("異常出現");
運行結果:
數組越界錯誤
異常出現
02.ArithmeticException:算術錯誤
System.out.println("請輸入除數:"); int result=input.nextInt(); System.out.println("請輸入被除數:");//這裡輸入0 int result2=input.nextInt(); try { int num=result/result2; System.out.println("結果:"+num); } catch (ArithmeticException e) { System.out.println("算術錯誤!"); }
如果被除數的輸入為0的話,就會產生算術錯誤
運行結果:
算術錯誤
我們上面列舉的常見異常也非常多,我在這裡就不一一來寫了,希望大家自己研究一下。
五.多重catch塊
一段代碼可能會引發多種異常,這時,可以在一個catch快後面多跟幾個catch快,分別處理不同的 異常,但需要注意的是排列的順序必須是從子類到父類,最後一個一般都是Exception類,那麼如果將父類異常放到前面,那麼所有的異常將被捕獲,後面的子類異常將得不到執行的機會。
六.拋出異常和聲明異常
在編程過程中,我們往往會遇到這種情況,在當前環境中無法解決,比如用戶傳入的參數錯誤等。此時,就要從當前環境中拋出異常提交給上級來處理。
在java語言中,使用throw關鍵字來拋出異常
private String name="";//姓名 //設置性別 public void setSex(String sex)throws Exception {//聲明異常使用throws關鍵字 if(sex.equals("男")||sex.equals("女")) { this.sex = sex; } else { throw new Exception("性別必須是男或女");//拋出異常使用throw關鍵字 }