全部異常對象的根基類是 Throwable ,Throwable從Object直接繼承而來(這是java系統所強制要求的),而且它實現了 Serializable接口(這爲全部的異常對象都可以輕鬆跨越Java組件系統作好了最充分的物質準備)。兩個子類,Error與Exception。Exception是java程序員所最熟悉的,它通常表明了真正實際意義上的異常對象的根基類。也便是說, Exception 和從它派生而來的全部異常都是應用程序可以catch到的,而且能夠進行異常錯誤恢復處理的異常類型。而Error則表示Java系統中出現了一個很是嚴重的異常錯誤,而且這個錯誤多是應用程序所不能恢復的,例如LinkageError ,或 ThreadDeath 等。java
Error 和 RuntimeException 的子類是 unchecked 的,也就是不須要明確地 throws Error 也能編譯經過。RuntimeException 表示這種異常是否出現常常不可預料,出現了的話,就停止處理。Error 通常表示沒法恢復的故障,也就是你再試一次依然會出錯,好比 OutOfMemoryError,試多少次很大機率出錯的;Exception 則表示通常性的異常,並且這種異常是設計中早已考慮到很常見的錯誤,而且必定要求在設計中說明若是處理這種異常。程序員
RuntimException 更接近咱們平常生活中的「意外」。Exception 這個更接近咱們平常生活中所說的「常見錯誤」。Error 更像是」見鬼,看來週末國慶不加班是搞不定的「。函數
Error類和Exception類的父類都是throwable類,他們的區別是:spa
Error類通常是指與虛擬機相關的問題,如系統崩潰,虛擬機錯誤,內存空間不足,方法調用棧溢等。對於這類錯誤的致使的應用程序中斷,僅靠程序自己沒法恢復和和預防,遇到這樣的錯誤,建議讓程序終止。設計
Exception類表示程序能夠處理的異常,能夠捕獲且可能恢復。遇到這類異常,應該儘量處理異常,使程序恢復運行,而不該該隨意終止異常。對象
Exception類又分爲運行時異常(Runtime Exception)和受檢查的異常(Checked Exception ),運行時異常;ArithmaticException,IllegalArgumentException,編譯能經過,可是一運行就終止了,程序不會處理運行時異常,出現這類異常,程序會終止。而受檢查的異常,要麼用try。。。catch捕獲,要麼用throws字句聲明拋出,交給它的父類處理,不然編譯不會經過。繼承
1.throw用在方法體內,throw是語句拋出一個異常(對象);throws是用在方法聲明後面,表示再拋出異常,由該方法的調用者來處理。接口
2.throw是具體向外拋異常的,拋出的是一個異常實例(代碼中對應的有model);throws聲明瞭是哪一種類型的異常,使它的調用者能夠捕獲這個異常。內存
3.throw,若是執行了,那麼必定是拋出了某種異常;而throws表示可能出現。get
4.同時出現的時候,throws出如今函數頭,throw出如今函數體,兩種不會由函數處理,真正的處理由函數的上層調用處理。