
Peter Holmes
0
2701
122
Como novato en programación Cómo aprender a programar sin todo el estrés Cómo aprender a programar sin todo el estrés Tal vez hayas decidido seguir con la programación, ya sea para una carrera o simplemente como un pasatiempo. ¡Excelente! Pero tal vez estés empezando a sentirte abrumado. No muy bien. Aquí hay ayuda para facilitar su viaje. , el concepto de manejo de excepciones puede ser difícil de entender. No es que el concepto en sí sea difícil, pero la terminología puede hacer que parezca más avanzado de lo que es. Y es una característica tan poderosa que es propensa al mal uso y abuso.
En este artículo, aprenderá cuáles son las excepciones, por qué son importantes, cómo usarlas y los errores comunes que debe evitar. Los idiomas más modernos 6 Los lenguajes de programación más fáciles de aprender para principiantes 6 Los lenguajes de programación más fáciles de aprender para principiantes Aprender a programar consiste en encontrar el idioma correcto tanto como en el proceso de edificación. Aquí están los seis lenguajes de programación más fáciles para principiantes. tiene algún tipo de manejo de excepciones, por lo que si alguna vez pasa de Java 7 Trucos útiles para dominar un nuevo lenguaje de programación 7 Trucos útiles para dominar un nuevo lenguaje de programación Está bien sentirse abrumado cuando está aprendiendo a codificar. Probablemente olvidará las cosas tan rápido como las aprenda. Estos consejos pueden ayudarlo a retener mejor toda esa información nueva. , puedes llevar la mayoría de estos consejos contigo.
Comprender las excepciones de Java
En Java, un excepción es un objeto que indica algo anormal (o “excepcional”) ocurrió durante la ejecución de su aplicación. Tales excepciones son arrojado, lo que básicamente significa que se crea un objeto de excepción (similar a cómo se producen los errores “elevado”).
La belleza es que puedes captura arroja excepciones, lo que le permite lidiar con la condición anormal y permite que su aplicación continúe ejecutándose como si nada saliera mal. Por ejemplo, mientras que un puntero nulo en C podría bloquear su aplicación, Java le permite lanzar y atrapar Excepción de puntero nulo
s antes de que una variable nula tenga la posibilidad de provocar un bloqueo.
Recuerde, una excepción es solo un objeto, pero con una característica importante: debe extenderse desde Excepción
clase o cualquier subclase de Excepción
. Si bien Java tiene todo tipo de excepciones integradas, también puede crear las suyas si lo desea. Algunas de las excepciones más comunes de Java incluyen:
Excepción de puntero nulo
NumberFormatException
Argumento de excepción ilegal
Excepción en tiempo de ejecución
IllegalStateException
Entonces, ¿qué sucede cuando lanzas una excepción??
Primero, Java busca dentro del método inmediato para ver si hay código que maneje el tipo de excepción que arrojó. Si no existe un controlador, observa el método que llamó al método actual para ver si existe un controlador allí. Si no, mira el método que llamó ese método, y luego el siguiente método, etc.. Si no se detecta la excepción, la aplicación imprime un seguimiento de la pila y luego se bloquea. (En realidad, es más matizado que simplemente estrellarse, pero ese es un tema avanzado más allá del alcance de este artículo).
UNA rastro de la pila es una lista de todos los métodos que atravesó Java mientras buscaba un controlador de excepción. Así es como se ve un seguimiento de pila:
Excepción en el hilo "main" java.lang.NullPointerException en com.example.myproject.Book.getTitle (Book.java:16) en com.example.myproject.Author.getBookTitles (Author.java:25) en com.example. myproject.Bootstrap.main (Bootstrap.java:14)
Podemos deducir mucho de esto. Primero, la excepción lanzada fue un Excepción de puntero nulo
. Ocurrió en el getTitle ()
método en la línea 16 de Book.java. Ese método fue llamado desde getBookTitles ()
en la línea 25 de Author.java. Ese método fue llamado desde principal()
en la línea 14 de Bootstrap.java. Como puede ver, saber todo esto facilita la depuración.
Pero de nuevo, el verdadero beneficio de las excepciones es que puedes “encargarse de” la condición anormal al detectar la excepción, arreglar las cosas y reanudar la aplicación sin fallar.
Uso de excepciones de Java en código
Digamos que tienes someMethod ()
que toma un número entero y ejecuta una lógica que podría romperse si el número entero es menor que 0 o mayor que 100. Este podría ser un buen lugar para lanzar una excepción:
public void someMethod (int value) if (value 100) throw new Argumento de excepción ilegal
(); // ...
Para detectar esta excepción, debe ir a donde someMethod ()
se llama y usa el bloque try-catch:
public void callingMethod () try someMethod (200); someOtherMethod (); catch (IllegalArgumentException e) // maneja la excepción aquí //…
Todo dentro del tratar el bloque se ejecutará en orden hasta que se produzca una excepción. Tan pronto como se lanza una excepción, se omiten todas las declaraciones posteriores y la lógica de la aplicación salta inmediatamente al captura bloquear.
En nuestro ejemplo, ingresamos el bloque try e inmediatamente llamamos someMethod ()
. Como 200 no está entre 0 y 100, un Argumento de excepción ilegal
es aventado. Esto termina inmediatamente la ejecución de someMethod ()
, omite el resto de la lógica en el bloque try (someOtherMethod ()
nunca se llama), y reanuda la ejecución dentro del bloque catch.
¿Qué pasaría si llamamos someMethod (50)
¿en lugar? los Argumento de excepción ilegal
nunca sería arrojado. someMethod ()
se ejecutaría como de costumbre. El bloque de prueba se ejecutaría normalmente, llamando someOtherMethod ()
cuando someMethod () se completa. Cuando someOtherMethod ()
termina, el bloque de captura se omitirá y callingMethod ()
continuaría.
Tenga en cuenta que puede tener múltiples bloques catch por bloque try:
public void callingMethod () try someMethod (200); someOtherMethod (); catch (IllegalArgumentException e) // maneja la excepción aquí catch (NullPointerException e) // maneja la excepción aquí //…
También tenga en cuenta que un opcional finalmente el bloque también existe:
método public void () try // ... catch (Exception e) // ... finally // ...
El código dentro de un bloque finalmente es siempre ejecutado pase lo que pase. Si tiene una declaración de devolución en el bloque try, el bloque finalmente se ejecuta antes de regresar del método. Si lanza otra excepción en el bloque catch, el bloque finalmente se ejecuta antes de que se lance la excepción..
Debe usar el bloque finalmente cuando tenga objetos que necesitan limpiarse antes de que finalice el método. Por ejemplo, si abrió un archivo en el bloque de prueba y luego arrojó una excepción, el bloque finalmente le permite cerrar el archivo antes de abandonar el método.
Tenga en cuenta que puede tener un bloque finalmente sin un bloque catch:
método público vacío () intente // ... finalmente // ...
Esto le permite hacer cualquier limpieza necesaria mientras permite que las excepciones generadas propaguen la pila de invocación del método (es decir, no desea manejar la excepción aquí pero aún necesita limpiar primero).
Excepciones marcadas frente a no marcadas en Java
A diferencia de la mayoría de los lenguajes, Java distingue entre excepciones marcadas y excepciones no verificadas (por ejemplo, C # solo tiene excepciones sin marcar). Una excepción marcada debe quedar atrapado en el método donde se produce la excepción o de lo contrario el código no se compilará.
Para crear una excepción marcada, extienda desde Excepción
. Para crear una excepción no marcada, extienda desde Excepción en tiempo de ejecución
.
Cualquier método que arroje una excepción marcada debe denotar esto en la firma del método usando el tiros palabra clave. Desde el Java incorporado IOException
es una excepción marcada, el siguiente código no se compilará:
public void wontCompile () // ... if (someCondition) throw new IOException (); // ...
Primero debe declarar que arroja una excepción marcada:
public void willCompile () lanza IOException // ... if (someCondition) throw new IOException (); // ...
Tenga en cuenta que se puede declarar que un método arroja una excepción, pero en realidad nunca arroja una excepción. Aun así, la excepción deberá ser detectada o el código no se compilará.
¿Cuándo debe usar excepciones marcadas o no marcadas??
La documentación oficial de Java tiene una página sobre esta pregunta. Resume la diferencia con una regla general sucinta: “Si se puede esperar razonablemente que un cliente se recupere de una excepción, conviértalo en una excepción marcada. Si un cliente no puede hacer nada para recuperarse de la excepción, conviértalo en una excepción no verificada.”
Pero esta guía puede estar desactualizada. Por un lado, las excepciones marcadas dan como resultado un código más robusto. 10 consejos para escribir más limpio y mejor código 10 consejos para escribir más limpio y mejor código Escribir código limpio parece más fácil de lo que realmente es, pero los beneficios valen la pena. Así es como puede comenzar a escribir código más limpio hoy. . Por otro lado, ningún otro idioma ha verificado las excepciones de la misma manera que Java, lo que muestra dos cosas: una, la función no es lo suficientemente útil para que otros lenguajes la roben, y dos, puedes vivir absolutamente sin ellas. Además, las excepciones marcadas no funcionan bien con las expresiones lambda introducidas en Java 8.
Pautas para el uso de excepciones de Java
Las excepciones son útiles, pero se usan y maltratan fácilmente. Aquí hay algunos consejos y mejores prácticas para ayudarlo a evitar ensuciarlos..
- Prefiere excepciones específicas a excepciones generales. Utilizar
NumberFormatException
terminadoArgumento de excepción ilegal
cuando sea posible, de lo contrario useArgumento de excepción ilegal
terminadoExcepción en tiempo de ejecución
cuando sea posible. - Nunca atrapar
Tirable
! losExcepción
la clase en realidad se extiendeTirable
, y el bloque catch realmente funciona conTirable
o cualquier clase que extienda Throwable. sin embargo, elError
la clase también se extiendeTirable
, y nunca quieres atrapar unError
porqueError
s indican problemas serios irrecuperables. - Nunca atrapar
Excepción
!Excepción interrumpida
se extiendeExcepción
, entonces cualquier bloque que atrapaExcepción
también atraparáExcepción interrumpida
, y esa es una excepción muy importante con la que no desea meterse (especialmente en aplicaciones multiproceso) a menos que sepa lo que está haciendo. Si no sabes qué excepción atrapar, considera no atrapar nada. - Use mensajes descriptivos para facilitar la depuración. Cuando lanza una excepción, puede proporcionar un
Cuerda
mensaje como argumento. Se puede acceder a este mensaje en el bloque catch utilizando elException.getMessage ()
método, pero si nunca se detecta la excepción, el mensaje también aparecerá como parte del seguimiento de la pila. - Intenta no atrapar e ignorar excepciones. Para evitar los inconvenientes de las excepciones comprobadas, muchos programadores novatos y perezosos establecerán un bloque de captura pero lo dejarán vacío. ¡Malo! Maneje siempre con gracia, pero si no puede, al menos imprima un rastro de la pila para que sepa que se produjo la excepción. Puedes hacer esto usando el
Exception.printStackTrace ()
método. - Cuidado con el uso excesivo de excepciones. Cuando tienes un martillo, todo parece un clavo. Cuando se entera de las excepciones, puede sentirse obligado a convertir todo en una excepción ... hasta el punto en que la mayor parte del flujo de control de su aplicación se reduce al manejo de excepciones. Recuerde, las excepciones son para “excepcional” ocurrencias!
Ahora debería sentirse lo suficientemente cómodo con las excepciones para comprender qué son, por qué se usan y cómo incorporarlos a su propio código. Si no comprende completamente el concepto, ¡está bien! Me llevó un tiempo “hacer clic” en mi cabeza, así que no sienta que necesita apresurarse. 6 Señales de que no está destinado a ser un programador. 6 Señales de que no debe ser un programador. No todos están dispuestos a ser programadores. Si no está completamente seguro de que está destinado a ser un programador, aquí hay algunas señales que pueden indicarle la dirección correcta. . Tome su tiempo.
¿Tienes alguna pregunta? ¿Conoces otros consejos relacionados con excepciones que me perdí? Compártelos en los comentarios a continuación!