Java中採用了強制異常捕捉機制,這樣一方面提升了程序的可靠性,不過有時候也帶來一些麻煩。好比: int i= Integer.parseInt("33");這個我知道它不可能會拋出異常,可是不捕捉異常的話就過不了編譯這關,固然這個代碼沒有意義的。 Java中全部異常或者錯誤都繼承Throwable,咱們把它分爲三類吧: 1.Error:全部都繼承自Error,表示致命的錯誤,好比內存不夠,字節碼不合法等。 2.Exception:這個屬於應用程序級別的異常,這類異常必須捕捉。 3.RuntimeException:奇怪RuntimeException繼承了Exception,而不是直接繼Error, 這個表示系統異常,比較嚴重。 Error咱們不多遇到,可是並非說Error就必定很是致命,舉個例子,NoSuchMethodError表示沒有這個方法,你調用的方法不存在,你必定以爲奇怪,不存在怎麼編譯的過去呀?很簡單的,你先編譯好一個被調用的類A,給一個方法。而後在你的程序調用它,編譯沒問題,運行也沒問題。如今再把A類中這個方法去掉,從新編譯一遍,你再運行你的程序就知道錯誤是怎麼回事了。 Exception不用說,咱們要本身捕捉。 RuntimeException能夠說見的最多了,下面咱們說明一下常見的RuntimeException: NullPointerException:見的最多了,其實很簡單,通常都是在null對象上調用方法了。 String s=null; boolean eq=s.equals(""); // NullPointerException 這裏你看的很是明白了,爲何一到程序中就暈呢? public int getNumber(String str){ if(str.equals("A")) return 1; else if(str.equals("B")) return 2; } 這個方法就有可能拋出NullPointerException,我建議你主動拋出異常,由於代碼一多,你可能又暈了。 public int getNumber(String str){ if(str==null) throw new NullPointerException("參數不能爲空"); //你是否以爲明白多了 if(str.equals("A")) return 1; else if(str.equals("B")) return 2; } NumberFormatException:繼承IllegalArgumentException,字符串轉換爲數字時。 好比int i= Integer.parseInt("ab3"); ArrayIndexOutOfBoundsException:數組越界 好比 int[] a=new int[3]; int b=a[3]; StringIndexOutOfBoundsException:字符串越界 好比 String s="hello"; char c=s.chatAt(6); ClassCastException:類型轉換錯誤 好比 Object obj=new Object(); String s=(String)obj; UnsupportedOperationException:該***做不被支持,若是咱們但願不支持這個方法,能夠拋出這個異常。既然不支持還要這個幹嘛?有可能子類中不想支持父類中有的方法,能夠直接拋出這個異常。 ArithmeticException:算術錯誤,典型的就是0做爲除數的時候。 IllegalArgumentException:非法參數,在把字符串轉換成數字的時候常常出現的一個異常,咱們能夠在本身的程序中好好利用這個異常。 這些異常一看到名字就知道是怎麼回事了,其實只要理解了java的異常處理機制,這些都不是問題。