Pregunta

¿Cuáles son las excepciones de tiempo de ejecución y cuáles son las excepciones comprobadas / sin control y la diferencia entre el error / Exception.Why estos muchos tipos? En lugar de Java puede simplemente seguir un diseño simple (sólo tratar / atrapar todos los tipos) para manejar una condición anormal en un programa?

¿Fue útil?

Solución

Throwable es en la parte superior de todas las excepciones. Debajo de Throwable que tiene errores y excepciones. Debajo de Excepción tiene RuntimeException.

Java tiene dos tipos de excepciones - marcado y sin marcar. Las excepciones comprobadas son impuestas por el compilador (que tiene que declarar en la cláusula throws y atraparlos con el tiempo). excepciones sin marcar, no se aplican para la captura o la declaración de cláusula throws.

(parte controvertida de la respuesta)

Throwable existe para que haya un padre para todos los tipos de excepción. Nunca se debe declarar que usted lanza Throwable y nunca se captura (a menos que realmente realmente realmente sabe lo que está haciendo).

Existe un error para indicar problemas con el entorno de ejecución, las cosas que su programa probablemente no puede recuperarse, como por ejemplo un archivo de clase de formato incorrecto o la máquina virtual funcionamiento de la memoria. No se debe coger un error a menos que realmente sepa lo que está haciendo.

existe excepción como la raíz de todos los errores no programador (Véase RuntimeException para la "excepción" a esta), tales como un archivo no se puede crear porque el disco está lleno. No se debe tirar, tiros, o excepción captura. Si tienes que coger Excepción asegurarse de que sabe lo que está haciendo.

RuntimeException existe para indicar todo error programador, tales como ir más allá del final de una matriz o llamar a un método en un objeto nulo. Estas son cosas que usted debe fijar de modo que no se debe lanzar excepciones - el indican que, el programador, se estropeó el código. Una vez más, no se debe coger éstos a menos que sepa lo que está haciendo.

Otros consejos

Ya que soy un nuevo desarrollador de Java, también he enfrentado algunas dificultades para distinguir y hacer frente a diferentes tipos de excepciones. Por eso he hecho una breve nota sobre este tema, y ??cada vez que me confundo pasar por ella. Aquí está con la imagen de la jerarquía de clases Throwable:
Throwable Jerarquía de la clase

[Imagen cortesía de JavaTpoint ].

Hay tres clases principales a tener en cuenta aquí: Throwable, Exception y Error. Entre estas clases Exception se puede dividir en dos tipos: "excepción comprobada" y "excepción no comprobada"

.

excepción comprobada:

  • Estas son las clases que se extienden Throwable excepto RuntimeException y Error.
  • También se les conoce como excepciones en tiempo de compilación, ya que se comprueban en tiempo de compilación, es decir, las fuerzas del compilador nosotros para cualquiera de las manijas con try/catch o indican en la firma de la función que les throws y nos obliga a tratar con ellos de la persona que llama .
  • Son problemas mediante programación recuperables que son causadas por condiciones inesperadas fuera del control del código (por ejemplo, base de datos de abajo, el archivo I / O error, de entrada incorrecta, etc).
  • Ejemplo:. IOException, SQLException, etc

Excepción Desactivada:

  • Las clases que se extienden RuntimeException son conocidos como excepciones sin marcar.
  • excepciones no comprobadas no se comprueban en tiempo de compilación, sino más bien en tiempo de ejecución, de ahí el nombre.
  • También son problemas mediante programación recuperables pero a diferencia comprobado excepción son causados ??por fallos en el flujo de código o configuración.
  • Ejemplo:. ArithmeticException, NullPointerException, ArrayIndexOutOfBoundsException, etc
  • Ya que son errores de programación, que se puede evitar muy bien / sabiamente codificación. Por ejemplo "división por cero" produce un ArithmeticException, que se puede evitar mediante una simple comprobación de la divisor. Del mismo modo podemos evitar NullPointerException simplemente comprobando las referencias: if (object != null) o incluso usando mejores técnicas .

Error:

  • Error se refiere a una situación irrecuperable que no está siendo manejada por un try/catch.
  • Ejemplo:. OutOfMemoryError, VirtualMachineError, AssertionError, etc

¿Por qué son estos muchos tipos?

Además de respuesta Stephen s C 'Quiero decir: manejo de excepciones es una operación relativamente cara en Java. No debemos poner toda situación excepcional en un bloque try/catch. El uso excesivo de try/catchs puede entorpecer el funcionamiento del programa.

En conclusión, Exceptions debe ser manejado mediante programación siempre que sea posible. Por otro lado, no podemos manejar Errors, por lo que estos podrían ser algunas de las razones lógicas por las que hay muchos tipos de excepciones.

de TofuBeer respuesta explica claramente lo que la excepción clases media.

  

¿Por qué estos muchos tipos? En lugar de Java puede simplemente seguir un diseño simple (sólo tratar / atrapar todos los tipos) para manejar una condición anormal en un programa?

¿Por qué? Porque son necesarios! Sin estas 4 clases, manejo de excepciones por grandes categorías, no sería práctico.

  • ¿Cómo atrapar a "todos los errores fatales" JVM sin la clase Error?
  • ¿Cómo atrapar a "todas las excepciones que no son JVM errores fatales" sin la clase Exception?
  • ¿Cómo atrapar a "todas las excepciones sin control" sin la clase RuntimeException?
  • Error (lanza por máquina virtual, no debe ser capturado o manipulado)
    1. VM Error
    2. aserción de error
    3. Vinculación de error ... etc.
  • Tiempo de ejecución / Deseleccionar excepción (error de programación, no debe ser capturado o manejado)
    1. NullPointerException
    2. ArrayIndexOutOfBoundException
    3. IllegalArgumentException ... etc.
  • excepción de comprobación (Todo lo demás, se espera que las aplicaciones a ser capturado o manipulado)
    1. IOException
    2. FileNotFoundException
    3. SQLException ... etc.

Las excepciones de tiempo de ejecución que proporcionan la flexibilidad necesaria para evitar la captura, la declaración de las excepciones.

Diferencia entre excepciones marcado y sin marcar:

Tenemos muchas diferencias entre comprueban y excepción no comprobada, pero todas las diferencias se originan de una vez consideración básica de que si el excepción es solucionable por el compilador o no.

Puntos a tener en cuenta son los siguientes:

[1] medios excepción comprobada Compiler verificado Excepciones . Esto significa que los mandatos del compilador que dicha excepción para ser manejado por bloque try-catch o lanza de palabras clave.

[2] excepciones no comprobadas son aquellos para los que compilador no ofrece ningún mandato ya que pueden ser resueltas por el desarrollador mediante la codificación / programando como el flujo de control se puede controlar como en ArithmeticException, NullPointerException ArrayIndexOutOfBoundsException , IllegalArgumentException, etc.

Me llaman “Excepción-Identidad-Test” donde se toma ninguna excepción azar de doc java y simplemente hacer que una pregunta. “Hey excepción! ¿Puede ser resuelto mediante programación?”

Si la excepción dice YES a continuación, se trata de una excepción no comprobada ya que esto puede ser resuelto por cualquiera de cambio de código o resolver algún cálculo etc error.

Por otra parte, si la excepción dice No Excepción entonces esto se comprueba que en el flujo de control excepción comprobada sale de nuestro código como si alguien cambia las contraseñas de bases de datos o alguien desenchufa el cable de red, tiempo de espera de conexión (ConnectException), algún recurso no se encuentra (FileNotFoundException, ClassNotFound), SQLException, InvocatonTargetException etc. Estos seres no pueden ser resueltos mediante la programación

artículo sumarizes A cuadros y No seleccionado excepciones de una manera clara y concisa.

  • Las excepciones comprobadas Las excepciones comprobadas son las excepciones que pueden ser detectados, la identificación y control en tiempo de compilación. Si un bloque de código produce una excepción de marcado, entonces el método debe manejar la excepción o se debe especificar la excepción usando la palabra clave throws.

    • Ejemplo :

      public void testDB() throws ClassNotFoundException, SQLException
      {
          Class.forName("com.mysql.jdbc.Driver");
          System.out.println("Driver Loaded");
          Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/selenium","root","root");
          System.out.println("Connected to MySQL DB");
      }
      
    • sea necesario especificar lista de excepciones usando tiros o tenemos que utilizar el bloque try-catch{}. He demostrado la Useage de throws en el siguiente programa.

  • Las excepciones no comprobadas Las excepciones no comprobadas se comprueban en el momento no compilado. excepciones Java bajo Error clases y RuntimeException excepciones sin marcar, y todo lo demás bajo throwable está marcada.

  

Resumen : Si un cliente puede esperar razonablemente para recuperarse de una excepción, que sea una excepción comprobada. Si un cliente no puede hacer nada para recuperarse de la excepción, que sea una excepción no comprobada.

La siguiente figura muestra la jerarquía de las clases de excepción. La clase base para todos los objetos de excepción es java.lang.Throwable, junto con sus dos subclases java.lang.Exception y java.lang.Error.

introducir descripción de la imagen aquí

  • La clase Error describe errores internos del sistema (por ejemplo, VirtualMachineError, LinkageError) que rara vez se producen. Si se produce un error de este tipo, es poco lo que se puede hacer y el programa va a ser terminado por el tiempo de ejecución de Java.

  • La clase Exception describe el error causado por el programa (por ejemplo FileNotFoundException, IOException). Estos errores pueden ser capturados y manipulados por el programa (por ejemplo, realizar una acción alternativa o hacer una salida elegante mediante el cierre de todos los archivos, conexiones de red y base de datos).

A cuadros vs Unchecked

Como se ilustra, las subclases de Error y RuntimeException se conoce como controla excepciones. Estas excepciones no son comprobados por el compilador, y por lo tanto, no tiene por qué ser capturados o declaradas para ser lanzado en su programa. Esto se debe a que no hay mucho que puede hacer con estas excepciones. Por ejemplo, una "división por 0" desencadena una ArithmeticException, índice de matriz fuera de la envolvente desencadenantes un ArrayIndexOutOfBoundException, que son realmente los errores de programación lógicos que se han corregido en tiempo compilado, en lugar de dejarlo a la gestión de excepciones en tiempo de ejecución.

Toda la otra excepción se llama comprobado excepciones. Porque son comprobados por el compilador y deben ser capturados o declaradas para ser lanzado.

RuntimeException y sus subclases no son comprobados por el compilador y no es necesario declarar en la firma del método. Por lo tanto, usarlos con cuidado, ya que no se encuentran y pueden no ser conscientes de las excepciones que se pueden producir mediante el uso de este método (y por lo tanto no tienen los códigos de control de excepciones propiamente dicho) -. Una mala práctica de la ingeniería de software

La fuente es aquí

Exceptions are two types in java:

1. **Checked Exception: The exceptions which are checked by compiler. 

Por ejemplo:. Que va a realizar la operación con el archivo, a continuación, el compilador le pedirá que manejar IOException ya sea por bloque try-catch o tiros palabra clave

2. Unchecked Exception: The exceptions which are not checked by compiler at run time. 

Por ejemplo: Si va a realizar la operación en un objeto sin crearlo; en este caso, obtendrá NullPointerException.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top