"¡Hola, amigo!"

"¡Hola, Ellie! ¿Cómo va la vida?"

"Excelente, gracias. ¿Cómo estás?"

"Genial, esta mañana me explicaron un montón de cosas nuevas."

"Bueno, eso es genial. ¿No estás cansado?"

"Sí, ahí está eso. Estoy un poco cansado".

"Entonces tuviste suerte. Quería cubrir un tema grande y complejo hoy, pero en el último momento cambié de opinión y decidí cubrir uno pequeño y fácil".

"¿Pequeño y fácil? Estoy listo".

"Hoy examinaremos el tema de las Excepciones en detalle".

"¿Estás hablando de manejo de errores?"

"No debe pensar en las excepciones como errores. Las excepciones son más como informes de que 'sucedió algo inesperado'. Con base en estos informes, puede proponer acciones alternativas".

"Se trata de métodos.  Cuando llamas a un método, promete hacer lo que fue llamado a hacer " .

"Cuando un método, por el motivo que sea, no puede hacer lo que se le pidió que hiciera, tiene que hacérselo saber a la persona que llama".

"En otras palabras, lo peor que podría pasar es que un método no haga su trabajo y no se lo cuente a nadie. Nada podría ser peor que eso. Pierdes el control de la situación cuando eso sucede" .

"Cuando eres un programador nuevo, parece que simplemente llamas a los métodos y están seguros de que harán lo que les pediste que hicieran".

"Cuando eres un programador experimentado, sabes que puede haber docenas de factores que afectan la capacidad de un método para hacer su trabajo, y que hay muchos casos que podrían impedir que un método complete su trabajo".

"Desde la perspectiva del programador, es mil veces mejor si un programa termina cuando encuentra un error que si el programa encuentra un error y luego continúa funcionando (incorrectamente) sin que el usuario se dé cuenta de lo que pasó".

"Entonces, ¿el programa que muestra algo incorrecto podría ser peor que si el programa se cerrara y perdiera todos los datos?"

"¿Qué te hizo pensar que el programa simplemente muestra algo incorrecto? ¿Tal vez los programas tienen muchos errores y todos tus datos se perderán irremediablemente? Supongamos que has escrito texto durante 3 horas, pero nada se guardará porque un error que ocurrió después de solo dos minutos".

"Cuando un programador novato encuentra excepciones, se frustra".

"Pero en realidad, las excepciones revelan todos los escenarios posibles que debería haber previsto pero no lo hizo".

"Podría elegir no manejar excepciones y eso lo convertiría en un mal programador. Pero si sus métodos no arrojan excepciones, entonces no es programador en absoluto, porque no entendió esta simple verdad:"

"un método hace lo que fue escrito para hacer, o arroja una excepción. ¡No hay una tercera opción!"

"Está bien, te creo. Prometo usar excepciones".

"Genial. Entonces déjame contarte sobre la jerarquía de excepciones:"

Jerarquía de excepción, errores - 1

"La jerarquía de excepciones se basa en cuatro clases".

"La clase base más baja es Throwable ".

"Las clases Error y Exception lo heredan".

" RuntimeException hereda Exception ".

"La clase Error es la clase base para errores de JVM como StackOverFlow , OutOfMemory ,..."

"Un programa generalmente no puede recuperarse de tales errores, lo que lo lleva a terminar".

"De hecho, ¿qué se puede hacer si no hay suficiente memoria para que el programa continúe ejecutándose normalmente o ha habido un desbordamiento de pila?"

" Exception es la clase base para todas las excepciones ordinarias lanzadas por un programa.  RuntimeException es un tipo especial de Exception que tiene reglas ligeramente diferentes".

"¿Qué son?"

"Eso es justo lo que voy a explicar ahora".

"Como probablemente recuerde, las excepciones se dividen en dos categorías: marcadas y no marcadas ".

"Si un método lanza excepciones verificadas , entonces el método que lo llama debe envolver la llamada en un bloque de intento y captura . Bueno, eso o volver a lanzar la excepción (a su llamador) indicando claramente los lanzamientos en la firma del método".

"Estas reglas/restricciones no se aplican a las excepciones no verificadas".

"Entonces, todas las excepciones que heredan Exception se consideran marcadas. Excepto las excepciones que heredan RuntimeException, que se consideran no marcadas".

"Ajá. Recuerdo que me dijiste algo así antes".

"¡Amigo! Preguntan sobre la jerarquía de excepciones en cada entrevista . Lo diré de nuevo: cada entrevista . Necesitas conocer este tema a la perfección".

"Está bien. Leeré todo de nuevo y lo resolveré. Gracias por ayudarme, Ellie".