Cómo detectar excepciones en java

Siempre que utilice una declaración que podría lanzar una excepción en Java, debe escribir código especial para anticipar y detectar la excepción. De esta manera, el programa no se bloqueará si se produce la excepción.

Video: Excepciones en JAVA - Cap 5 Crear excepciones propias

Se captura una excepción mediante el uso de una tratar declaración, que tiene esta forma general:

tratar{ declaraciones que pueden lanzar excepciones}captura (-Tipo de excepción identificador) { declaraciones ejecutan cuando se lanza una excepción}

A continuación, se colocan las declaraciones que pudieran arrojar una excepción dentro de una tratar bloquear. A continuación, se captura la excepción con una captura bloquear.

Aquí están algunas cosas a tener en cuenta sobre tratar declaraciones:

  • Puede codificar más de una captura bloquear. De esta manera, si las declaraciones en el tratar bloque podría lanzar más de un tipo de excepción, se puede coger cada tipo de excepción en un separada captura bloquear.

  • Para los propósitos de alcance, el tratar bloque es su propio bloque autónomo, separado del captura bloquear. Como resultado, las variables que se declaran en el tratar bloque no son visibles para el captura bloquear. Si usted quiere que sean, los declaran inmediatamente antes de la tratar declaración.

  • También puede codificar un bloque especial (llamado finalmente bloquear) después de todo el captura bloques. Para obtener más información acerca de la codificación finalmente bloques.

  • Las diversas clases de excepción en la API de Java se definen en diferentes paquetes. Si utiliza una clase de excepción que no está definido en la norma java.lang paquete que siempre está disponible, es necesario proporcionar una importar Declaración para el paquete que define la clase de excepción.

Un ejemplo sencillo

Para ilustrar cómo proporcionar una excepción, esto es un programa que divide dos números y utiliza una tratar/captura declaración interceptar una excepción si el segundo número resulta ser cero:

DivideByZero public class {void main (String [] args) {public static int a = 5-int b = 0- // sabes que esto no va a worktry {int c = a / b- // pero intenta de todos modos} captura (ArithmeticException e) {System.out.println ("Vaya, no se puede "+ "dividir entre cero.") -}}}

Aquí, la división se produce dentro de una tratar bloque, y una captura manijas de bloque ArithmeticException. ArithmethicException se define por java.lang, por lo que una importar declaración de que no es necesario.

Cuando se ejecuta este programa, se muestra el siguiente en la consola:

Vaya, no se puede dividir por cero.

No hay nada que ver aquí.

Otro ejemplo

Aquí es un ejemplo sencillo de un programa que utiliza un método para obtener un número entero válido del usuario. Si el usuario introduce un valor que no es un entero válido, el captura bloque de captura el error y obliga a que el bucle se repita.

. Import java.util * - public class getInteger {sc = escáner estática nuevo escáner (System.in) -públicos void main (String [] args) {System.out.print estáticos ("Introduzca un número entero: ") -INT i = GetAnInteger () - System.out.println ("Entraste " + I) -} public int GetAnInteger estática () {while (true) {try {return sc.nextInt () -} catch (InputMismatchException e) {sc.next () - System.out.print ("Eso no es "+ "un entero. Inténtalo de nuevo: ") -}}}}

Aquí el comunicado que tiene la entrada del usuario y lo devuelve a los métodos llamados se codifica dentro de la tratar bloquear. Si el usuario introduce un número entero válido, esta afirmación es el único en este método que se ejecuta.

Si el usuario introduce los datos que no se puede convertir en un entero, sin embargo, la nextInt método produce una InputMismatchException. A continuación, esta excepción es interceptada por el captura bloque - que dispone de una entrada incorrecta del usuario llamando al siguiente método, así como mediante la visualización de un mensaje de error. Entonces el mientras bucle se repite.

Esto es lo que la consola podría ser similar a una ejecución típica de este programa:

Introduzca un número entero: TresEso no es un entero. Intentarlo de nuevo: 3.001That no es un entero. Pruebe otra vez entró 3Usted 3

Aquí hay un par de cosas a tener en cuenta sobre este programa:

  • los importar Especifica los estados java.util. * para importar todas las clases de la java.util paquete. De esta manera, el InputMismatchException la clase ha sido importada.

  • los siguiente método debe ser llamado en el captura bloque de disponer de una entrada no válida del usuario debido a que la nextInt método deja el valor de entrada en el Escáner‘S flujo de entrada si una InputMismatchException es aventado. Si se omite la instrucción que llama siguiente, el mientras lazo mantiene su lectura, se produce una excepción, y muestra un mensaje de error en un bucle infinito.

    Este error se ha encontrado la manera difícil. (La única manera de hacer que se detenga es cerrar la ventana de la consola.)

Artículos Relacionados