En Java, las excepciones se organizan en una jerarquía de clases. Todas las excepciones son subclases de la clase Throwable, que tiene dos subclases principales: Exception y Error.
Las excepciones que heredan de la clase Exception se llaman excepciones verificadas (checked exceptions). Estas excepciones deben ser tratadas explícitamente en un bloque try-catch o declaradas en una cláusula throws en la firma del método.
Las excepciones que heredan de la clase Error representan errores que hacen que el sistema no se pueda recuperar, como falta de memoria o fallas internas.
La clase RuntimeException es una subclase directa de Exception, y las clases que heredan de ella se llaman excepciones no verificadas (unchecked exception). Estas excepciones indican errores lógicos en el código.
Al manejar excepciones en un bloque try-catch, es importante considerar la jerarquía de excepciones. Puedes capturar excepciones de una clase madre en un bloque catch que captura excepciones de una clase hija, pero no al revés.