Cómo atrapar 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.
Conteúdo
Coges una excepción mediante el uso de un probar declaración, que tiene esta forma general:
probar{ declaraciones que pueden lanzar excepciones}captura (identificador del tipo de excepción) { declaraciones ejecutadas cuando se lanza una excepción}
Aquí, usted pone las declaraciones que pudieran arrojar una excepción dentro de un probar bloque. Entonces se captura la excepción con un captura bloque.
Aquí están algunas cosas a tener en cuenta sobre probar declaraciones:
Puede codificar más de un captura bloque. De esa manera, si las declaraciones en el probar bloque podría lanzar más de un tipo de excepción, se puede coger cada tipo de excepción en un separada captura bloque.
Para los propósitos de alcance, la probar bloque es su propio bloque autónomo, independiente de la captura bloque. Como resultado, las variables que se declaran en el probar bloque no son visibles para el captura bloque. Si usted quisiera que fueran, los declaran inmediatamente antes de la probar comunicado.
También puede codificar un bloque especial (llamado finalmente bloque) 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, usted necesita dar importación 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 un probar/captura declaración de atrapar una excepción si el segundo número resulta ser cero:
public class DivideByZero {main (String [] args) void estáticos públicos {int a = 5-int b = 0- // sabes esto no worktry {int c = a / b- // pero intenta de todos modos} capturas (ArithmeticException e) {System.out.println ("Vaya, no se puede" "división por cero". +) -}}}
Aquí, la división se produce dentro de una probar bloque, y un captura manijas de bloque ArithmeticException. ArithmethicException se define por java.lang, por lo que una importación declaración de que no es necesario.
Cuando se ejecuta este programa, el siguiente aparece en la consola:
Vaya, no se puede dividir por cero.
No hay nada que ver aquí.
Otro ejemplo
Aquí está 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 número entero válido, el captura bloque detecta el error y obliga al bucle para repetir.
. import java.util * - public class getInteger {sc Scanner estática = new Scanner (System.in) main (String [] args) {static void -públicos System.out.print ("Introduzca un número entero:") -INT i = GetAnInteger () - System.out.println ("Usted entró" + i) -} public static int GetAnInteger () {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 en el probar bloque. Si el usuario introduce un número entero válido, esta afirmación es el único de 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 lanza una InputMismatchException. Entonces esta excepción es interceptada por el captura bloquear - que dispone de 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 para una ejecución típica de este programa:
Introduzca un número entero: de tresEso no es un entero. Trate de nuevo: 3.001That no es un entero. Inténtalo de nuevo: 3Usted entró 3
Aquí hay un par de cosas a tener en cuenta acerca de este programa:
los importación especifica los estados java.util. * para importar todas las clases de la java.util paquete. De esa manera, la InputMismatchException clase es importada.
los Siguiente método debe ser llamado en el captura bloque de disponer de entrada no válida del usuario porque el nextInt método deja el valor de entrada en el Scanner's flujo de entrada si un InputMismatchException se lanza. Si se omite la declaración que llama Siguiente, el mientras bucle mantiene su lectura, se produce una excepción, y muestra un mensaje de error en un bucle infinito.
Se encontró que este error de la manera difícil. (La única manera de hacer que se detenga es cerrar la ventana de la consola.)