Java中Exception的種類

來源:互聯網
上載者:User
文章目錄
  • java.lang.Throwable
  • java.lang.Error
  • java.lang.Exception
  • java.lang.RuntimeException

通常來講,Java中的異常會被分為三種:

  1. Error: 這種異常被設計成不被捕獲,因為這種異常產生於JVM自身。
  2. Runtime Exception: 運行時異常往往與環境有關,編譯時間無法檢查,並且可能發生的情況太廣泛,所以系統會去處理,程式不需要捕獲。
  3. 普通異常: 常見的異常大多屬於此類。

這裡的Java異常指直接繼承java.lang.Throwable的異常類,他們的結構如:

  • java.lang.Throwable

    • java.lang.Error
    • java.lang.Exception
      • java.lang.RuntimeException
java.lang.Throwablejava.lang.Throwable是Java中所有可以錯誤和異常的父類。這裡設計成父類而不是介面,我想部分原因可能是在Java誕生的早期,使用類繼承結構更為流行。但更重要的原因應該是由於Exception不適於設計為介面。介面重視的是實現方法,規則的描述,而Exception重視的是裡面含有的資訊以及類名等資訊。Throwable的子類一般含有兩個建構函式:空參數的建構函式和帶異常資訊String參數的建構函式。如果此類繼承自其它Exception類,又會多兩個建構函式:含Throwable參數的建構函式和含Throwable,描述資訊String兩個參數的建構函式。java.lang.Errorjava.lang.Error發生在應用程式不應該試圖捕獲的情況。Java程式不需要去throw或catch此類及其子類,因為這種異常不應該由應用程式處理,並且通常屬於abnormal的情況。java.lang.Exceptionjava.lang.Exception是指Java程式應該捕獲的異常。其中,java.lang.RuntimeException是其中一個特別的子類。java.lang.RuntimeExceptionJava程式應該捕獲,卻可以不去捕獲的一個異常。在大多數情況下,都不會去捕獲他,一個重要原因是這種異常可能發生的情況太普遍,幾乎每行代碼都會有RuntimeException的風險,因此反而無需去捕獲了。JDK文檔中的原話是:“A method is not required to declare in its  throws clause
any subclasses of  RuntimeException that might be thrown during the execution of the method but not caught.”java.lang.RuntimeException的直接子類有這些:

  1. AnnotationTypeMismatchException
  2. ArithmeticException
  3. ArrayStoreException
  4. BufferOverflowException
  5. BufferUnderflowException
  6. CannotRedoException
  7. CannotUndoException
  8. ClassCastException
  9. CMMException
  10. ConcurrentModificationException
  11. DataBindingException
  12. DOMException
  13. EmptyStackException
  14. EnumConstantNotPresentException
  15. EventException
  16. IllegalArgumentException
  17. IllegalMonitorStateException
  18. IllegalPathStateException
  19. IllegalStateException
  20. ImagingOpException
  21. IncompleteAnnotationException
  22. IndexOutOfBoundsException
  23. JMRuntimeException
  24. LSException
  25. MalformedParameterizedTypeException
  26. MirroredTypeException
  27. MirroredTypesException
  28. MissingResourceException
  29. NegativeArraySizeException
  30. NoSuchElementException
  31. NoSuchMechanismException
  32. NullPointerException
  33. ProfileDataException
  34. ProviderException
  35. RasterFormatException
  36. RejectedExecutionException
  37. SecurityException
  38. SystemException
  39. TypeConstraintException
  40. TypeNotPresentException
  41. UndeclaredThrowableException
  42. UnknownAnnotationValueException
  43. UnknownElementException
  44. UnknownTypeException
  45. UnmodifiableSetException
  46. UnsupportedOperationException
  47. WebServiceException
類設計時使用Exception的幾個最佳實務(讀Effective Java有感)在Effective Java的Item 58中,Java Exception被分為三類:Error,checked exception和runtime exception。在設計類時,這三種Exception這樣使用為佳:
  1. Error:用於JVM相關的錯誤,例如resource deficiences,invariant failures以及其他使JVM無法正常啟動並執行異常。
  2. Runtime Exception:用於編程錯誤,JDK內建的很多就是用於編程錯誤
  3. Checked Exception:用於可以恢複的異常。
由於Error通常用於JVM相關的錯誤,因此其他的unchecked exception都應該繼承自Runtime Exception

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.