Latest web development tutorials

manejo de excepciones de Java

Las excepciones son algunos errores en el programa, pero no todos los errores son excepciones, y algunas veces se pueden evitar errores.

Por ejemplo, el código menos un punto y coma, y ​​luego se queda sin los resultados es solicitar java.lang.Error mal; si utiliza System.out.println (11/0), entonces usted está haciendo porque utiliza un divisor 0 será lanzada java.lang.ArithmeticException excepción.

Hay muchas razones por las se produce una excepción, por lo general contiene las siguientes categorías:

  • los datos de entrada del usuario ilegales.
  • Para abrir un archivo que no existe.
  • conexión de comunicación de la red es de desbordamiento de memoria interrumpido o JVM.

Estas excepciones, ya sea a causa de un error del usuario causaron algunos errores de procedimiento causado porque hay otros errores físicos. -

Para entender el manejo de excepciones de Java es cómo funciona, es necesario tener los siguientes tres tipos de excepciones:

  • excepción comprobada: el más representativo marcada excepción es una excepción debido a errores del usuario o un problema, es el programador imprevisible. Por ejemplo, si desea abrir un archivo que no existe, se produce una excepción, la excepción no puede ser simplemente ignorado en tiempo de compilación.
  • Excepción es probable que sea un programador para evitar un funcionamiento anormal: tiempo de ejecución es una excepción. En contraste con la excepción comprobada, a excepción de tiempo de ejecución puede ser ignorada en tiempo de compilación.
  • Error: error no es anormal, sino de la cuestión del control del programador. Error en el código son generalmente ignorados. Por ejemplo, cuando se produce un error de un desbordamiento de pila, no pueden comprobar en tiempo de compilación.

jerarquía de clase de excepción

Todas las clases de excepción heredan de subclase java.lang.Exception.

clase de excepción es una subclase de la clase Throwable. Además de la clase de excepción, Throwable hay una subclase de error.

Los programas Java no suelen detectar el error. Error ocurre generalmente cuando una falta grave, que son visibles fuera de la ejecución del programa Java.

entorno de ejecución de error se utiliza para indicar un error se produce.

Por ejemplo, la JVM de desbordamiento de memoria. En general, el programa no se recupera a partir del error.

clase de excepción tiene dos subcategorías principales: clase IOException y de clase RuntimeException.

Incorporado en la clase de Java (la próxima será explicada), que tiene la mayor parte de los controles habituales y excepción no comprobada.


Clase incorporada excepción de Java

lenguaje Java define varias clases de excepción en el paquete java.lang estándar.

clases de excepción de tiempo de ejecución estándar son subclases de las clases de excepciones más comunes. Desde paquete java.lang se carga por defecto a todos los programas de Java, así que la mayoría de las clases de excepción de tiempo de ejecución anomalías hereditarias puede ser utilizado directamente.

De acuerdo con diversos biblioteca de clases de Java define también una serie de otras excepciones, la siguiente tabla muestra la excepción sin control de Java.

anormal descripción
ArithmeticException Cuando las condiciones de operación anormales, se lanza esta excepción. Por ejemplo, un número entero "división por cero" inicia una instancia de esta clase.
ArrayIndexOutOfBoundsException Con un índice ilegal para acceder a una amplia gama lanzada. Si el índice es negativo o mayor que o igual tamaño de la matriz, el índice es el índice ilegal.
ArrayStoreException Tratando de almacenar el tipo incorrecto de objeto en una serie de excepciones lanzadas.
ClassCastException Cuando intenta convertir un objeto no es una instancia de una subclase lanzados.
IllegalArgumentException Lanzado para indicar que el método se ha pasado un argumento ilegal o inapropiada.
IllegalMonitorStateException Lanzado para indicar que un mensaje ha tratado de esperar en el monitor de un objeto o de notificar a otros objetos están a la espera detector de hilo sin el monitor especificado.
IllegalStateException En el caso de un tiempo ilegal o inapropiada para llamar a un método para generar una señal. En otras palabras, el entorno Java o aplicación Java no está en un estado apropiado para la operación solicitada.
IllegalThreadStateException Hilo no está en un estado apropiado cuando se requiera arrojado operación solicitada.
IndexOutOfBoundsException Se indica un índice de clasificación (por ejemplo, ordenar una matriz, una cadena o vector) arrojado fuera de rango.
NegativeArraySizeException Si una aplicación intenta crear una matriz con las dimensiones negativas, lanzados.
NullPointerException Cuando una aplicación intenta utilizar un objeto en la necesidad de locales null cuando se lanza
NumberFormatException Cuando una aplicación intenta convertir una cadena en un tipo numérico, pero que la cadena no se puede convertir en el formato adecuado, repartió la anomalía.
SecurityException Por el gerente de seguridad se produce una excepción, que indica una violación de la seguridad.
StringIndexOutOfBoundsException Esta excepción a la String lanza métodos para indicar que un índice es negativo o mayor que el tamaño de la cadena.
UnsupportedOperationException Cuando no se admite tirado la operación solicitada.

La siguiente tabla muestra el Java definida en el paquete java.lang verificado clases de excepción.

anormal descripción
ClassNotFoundException Aplicación intenta cargar la clase, no se puede encontrar la clase correspondiente lanzados.
CloneNotSupportedException Cuando se llama al Object de clase clone método para clonar un objeto, pero la clase del objeto no se puede poner en práctica Cloneable una interfaz lanzada.
IllegalAccessException Cuando se les niega el acceso a una clase lanzada.
InstantiationException Cuando intenta utilizar la Class clase newInstance crear una instancia de un método de clase, objeto de la clase designada porque es una interfaz o una clase abstracta no puede ser instanciada, repartió la anomalía.
InterruptedException Un hilo es interrumpido por otro hilo, se lanza esta excepción.
NoSuchFieldException Variable solicitada no existe
NoSuchMethodException Método solicitado no existe

anomalía

La siguiente lista es el principal método de clase Throwable:

No. Método y Descripción
1 Cadena getMessage pública ()
Devuelve información detallada sobre ocurrió la excepción. La noticia inicializado en el constructor de la clase Throwable.
2 pública Throwable getCause ()
Devuelve un objeto Throwable que representa la razón de la excepción.
3 public String toString ()
Resultados utilizando el getMessage () devuelve el nombre de la clase de Cascade.
4 printStackTrace public void ()
Imprimir toString () resultado y nivel de pila de System.err, es decir, la corriente de salida de error.
5 público StackTraceElement [] getStackTrace ()
Devuelve una matriz que contiene un nivel de pila. 0 elemento subíndice representa la parte superior de la pila, el último elemento representa un suelo de circuito de llamada al método de la pila.
6 pública Throwable fillInStackTrace ()
pila de objetos Throwable se llena con el nivel actual del nivel de la pila de llamadas, sumado al nivel de la pantalla de la información anterior.

Detectar la excepción

Try de uso y las palabras clave de captura puede detectar la excepción. tratar de bloque / catch en lugar excepciones que pudieran ocurrir.

Sintaxis bloque de código try / catch se llama un código de protección con try / catch es el siguiente:

try
{
   // 程序代码
}catch(ExceptionName e1)
{
   //Catch 块
}

sentencia catch contiene una excepción para captar el tipo de declaración. Cuando el bloque de código de protección cuando se produce una excepción, tratar la parte posterior del bloque catch será verificada.

Si la excepción contenida en el bloque catch, la excepción se pasa al bloque catch, y pasar un parámetro de este método es el mismo.

Ejemplos

El siguiente ejemplo se ha declarado un array de dos elementos, cuando el código intenta acceder al tercer elemento de la matriz cuando se va a lanzar una excepción.

// 文件名 : ExcepTest.java
import java.io.*;
public class ExcepTest{

   public static void main(String args[]){
      try{
         int a[] = new int[2];
         System.out.println("Access element three :" + a[3]);
      }catch(ArrayIndexOutOfBoundsException e){
         System.out.println("Exception thrown  :" + e);
      }
      System.out.println("Out of the block");
   }
}

Lo anterior compilación de código y ejecutar el siguiente resultado:

Exception thrown  :java.lang.ArrayIndexOutOfBoundsException: 3
Out of the block

múltiples bloques catch

Una pluralidad de bloques de código de captura después de que el bloque de código se llama un intento de seguir la captura múltiple.

sintaxis del bloque de captura múltiple es el siguiente:

 try{
    // 程序代码
 }catch(异常类型1 异常的变量名1){
    // 程序代码
 }catch(异常类型2 异常的变量名2){
    // 程序代码
 }catch(异常类型2 异常的变量名2){
    // 程序代码
 }

El fragmento de código anterior contiene tres bloques catch.

Usted puede agregar cualquier número de bloques de captura detrás de la sentencia try.

Si se produce una excepción en el código de protección, se produce una excepción al primer bloque catch.

Si se lanza la excepción de coincidencia de tipos de datos de ExceptionType1, donde será capturado.

Si no, se transfiere al segundo bloque de captura.

Por lo tanto, hasta que se detecta la excepción por cualquier captura o bloque.

Ejemplos

Este ejemplo muestra cómo el uso de múltiples try / catch.

try
{
   file = new FileInputStream(fileName);
   x = (byte) file.read();
}catch(IOException i)
{
   i.printStackTrace();
   return -1;
}catch(FileNotFoundException f) //Not valid!
{
   f.printStackTrace();
   return -1;
}

lanza / tiro Palabras clave:

Si un método no captura una excepción comprobada, a continuación, el método debe utilizar la palabra clave tiros a declarar. lanza palabra clave en la parte terminal de la firma del método.

También puede utilizar la palabra clave tiro una excepción, si es nuevo o recién instanciada capturado.

La siguiente declaración de método emite una excepción RemoteException:

import java.io.*;
public class className
{
   public void deposit(double amount) throws RemoteException
   {
      // Method implementation
      throw new RemoteException();
   }
   //Remainder of class definition
}

Un método puede ser declarado para lanzar múltiples excepciones, separados por una coma entre múltiples excepciones.

Por ejemplo, la siguiente declaración de método lanza RemoteException y InsufficientFundsException:

import java.io.*;
public class className
{
   public void withdraw(double amount) throws RemoteException,
                              InsufficientFundsException
   {
       // Method implementation
   }
   //Remainder of class definition
}

finalmente palabra clave

Finalmente palabra clave se utiliza para crear los bloques de código después de que el bloque de código intenta realizar.

Sea o no se produce una excepción, siempre será ejecutado por último código del bloque de código.

En el bloque finally, puede ejecutar la limpieza de las secuelas de la naturaleza del tipo de declaración final.

Por último bloque aparece en el bloque catch Por último, la sintaxis es la siguiente:

 try{
    // 程序代码
 }catch(异常类型1 异常的变量名1){
    // 程序代码
 }catch(异常类型2 异常的变量名2){
    // 程序代码
 }finally{
    // 程序代码
 }
 

Ejemplos

 public class ExcepTest{

   public static void main(String args[]){
      int a[] = new int[2];
      try{
         System.out.println("Access element three :" + a[3]);
      }catch(ArrayIndexOutOfBoundsException e){
         System.out.println("Exception thrown  :" + e);
      }
      finally{
         a[0] = 6;
         System.out.println("First element value: " +a[0]);
         System.out.println("The finally statement is executed");
      }
   }
}

Los ejemplos anteriores resultados compilados son los siguientes:

Exception thrown  :java.lang.ArrayIndexOutOfBoundsException: 3
First element value: 6
The finally statement is executed

Tenga en cuenta que los siguientes asuntos:

  • captura no puede existir independientemente de la oportunidad.
  • En el try / catch no se añade después de requisitos obligatorios finalmente.
  • No después del bloque catch try ni hizo este bloque.
  • tratar, coger, finalmente, no se puede añadir cualquier código entre bloques.

Declaración de excepción personalizada

En Java, puede personalizar la excepción. Los siguientes puntos deben recordar para escribir sus propias clases de excepción.

  • Todas las excepciones deben ser subclases de Throwable.
  • Si desea escribir una clase de excepción comprobada, lo que necesita para heredar la clase de excepciones.
  • Si desea escribir una clase de excepción de tiempo de ejecución, lo que necesita para heredar la clase RuntimeException.

Puede definir su propia clase de excepción de esta manera:

class MyException extends Exception{
}

Sólo la clase de excepción hereda de crear clases de excepción se comprueban clases de excepción.

La siguiente clase de InsufficientFundsException es una clase de excepción definida por el usuario que hereda de Excepción.

Una clase de excepción y de cualquier otra clase, contiene variables y métodos.

Ejemplos

// 文件名InsufficientFundsException.java
import java.io.*;

public class InsufficientFundsException extends Exception
{
   private double amount;
   public InsufficientFundsException(double amount)
   {
      this.amount = amount;
   } 
   public double getAmount()
   {
      return amount;
   }
}

Para demostrar cómo utilizar nuestra clase de excepción personalizada,

En la siguiente clase CuentaCorriente contiene un método de retirar () lanza una excepción InsufficientFundsException.

// 文件名称 CheckingAccount.java
import java.io.*;

public class CheckingAccount
{
   private double balance;
   private int number;
   public CheckingAccount(int number)
   {
      this.number = number;
   }
   public void deposit(double amount)
   {
      balance += amount;
   }
   public void withdraw(double amount) throws
                              InsufficientFundsException
   {
      if(amount <= balance)
      {
         balance -= amount;
      }
      else
      {
         double needs = amount - balance;
         throw new InsufficientFundsException(needs);
      }
   }
   public double getBalance()
   {
      return balance;
   }
   public int getNumber()
   {
      return number;
   }
}

El programa siguiente muestra cómo llamar a la clase de depósito BankDemo CuentaCorriente () y retire el método ().

//文件名称 BankDemo.java
public class BankDemo
{
   public static void main(String [] args)
   {
      CheckingAccount c = new CheckingAccount(101);
      System.out.println("Depositing $500...");
      c.deposit(500.00);
      try
      {
         System.out.println("\nWithdrawing $100...");
         c.withdraw(100.00);
         System.out.println("\nWithdrawing $600...");
         c.withdraw(600.00);
      }catch(InsufficientFundsException e)
      {
         System.out.println("Sorry, but you are short $"
                                  + e.getAmount());
         e.printStackTrace();
      }
    }
}

Compilar los tres ficheros de arriba, y ejecutar el programa BankDemo, obtener los resultados de la siguiente manera:

Depositing $500...

Withdrawing $100...

Withdrawing $600...
Sorry, but you are short $200.0
InsufficientFundsException
        at CheckingAccount.withdraw(CheckingAccount.java:25)
        at BankDemo.main(BankDemo.java:13)

excepción general

En él se definen dos tipos de excepciones y errores en Java.

  • JVM (Java Virtual Machine) excepción: excepción lanzada por la JVM o errores. Por ejemplo: Clase de NullPointerException, clase ArrayIndexOutOfBoundsException, clase ClassCastException.
  • excepción de nivel del programa: programa de API por el programa o tirado. Por ejemplo IllegalArgumentException clase, clase IllegalStateException.