먼저 최상위에 있는 Throwable 클래스와 그 아래 1 단계 까지만 보겠습니다.
1318221963.bmp
Error 클래스 계층 구조 입니다.
1265474390.bmp
맨 위에 있는 박스 안에 있는 클래스들이 Error 클래스를 상속받은 1단계의 클래스들이고 아래의 박스는 VirtualMachineError의 하위 클래스들 입니다. OutOfMemoryError과 StacjOverflowError가 여기 있었군요.

Exception 클래스를 상속 받은 클래스들은 다음과 같습니다. 차마 그릴 수가 없더군요.
[#M_ more.. | less.. |
AclNotFoundException, ActivationException, AlreadyBoundException, ApplicationException, AWTException, BackingStoreException, BadAttributeValueExpException, BadBinaryOpValueExpException, BadLocationException, BadStringOperationException, BrokenBarrierException, CertificateException, ClassNotFoundException, CloneNotSupportedException, DataFormatException, DatatypeConfigurationException, DestroyFailedException, ExecutionException, ExpandVetoException, FontFormatException, GeneralSecurityException, GSSException, IllegalAccessException, IllegalClassFormatException, InstantiationException, InterruptedException, IntrospectionException, InvalidApplicationException, InvalidMidiDataException, InvalidPreferencesFormatException, InvalidTargetObjectTypeException, InvocationTargetException, IOException, JMException, LastOwnerException, LineUnavailableException, MidiUnavailableException, MimeTypeParseException, NamingException, NoninvertibleTransformException, NoSuchFieldException, NoSuchMethodException, NotBoundException, NotOwnerException, ParseException, ParserConfigurationException, PrinterException, PrintException, PrivilegedActionException, PropertyVetoException, RefreshFailedException, RemarshalException, RuntimeException, SAXException, ServerNotActiveException, SQLException, TimeoutException, TooManyListenersException, TransformerException, UnmodifiableClassException, UnsupportedAudioFileException, UnsupportedCallbackException, UnsupportedFlavorException, UnsupportedLookAndFeelException, URISyntaxException, UserException, XAException, XMLParseException, XPathException_M#]
지금 까지 살펴본 클래스 들은 상속 구조로 둘로 나누어 봤지만 다른 기준으로도 둘로 나눌 수 있습니다.
"Check Exception이냐 Unchecked Exception 이냐"입니다. 이렇게 나눠보는 이유는 컴파일 타임 때 프로그램이 Checked Exception을 다루는 코드가 들어있는지 확인하게 되기 때문입니다. Checked Exception이 발생할 수 있는 생성자나 메소드는 꼭 그걸 다루는 코드가 있어야만 컴파일을 통과하게 되는거죠. 따라서 이렇게 나눠보는것이 오히려 더 유용할 수도 있습니다.

지금까지 보았던 모든 Throwable의 하위 클래스 중에서 Unchecked Exception(확인되지 않은 예외)은 RuntimeException을 상속받은 Exception들과 Error의 하위 클래스들 입니다.

그럼 이제 Excpetion들 중에서 RuntimeException의 하위 크래스들만 보면 모든 Throwable 타입의 클래스들을 둘로 나눌수 있는 두 가지 기준을 살펴볼 수 있을 것입니다.
[#M_ more.. | less.. |
AnnotationTypeMismatchException, ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, EnumConstantNotPresentException, EventException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IncompleteAnnotationException, IndexOutOfBoundsException, JMRuntimeException, LSException, MalformedParameterizedTypeException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, RejectedExecutionException, SecurityException, SystemException, TypeNotPresentException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException
_M#]
역시 이것도 엄청나게 많습니다.