2010-11-20 27 views
12

Duplicar posible:
In Java, when should I create a checked exception, and when should it be a runtime exception?Uso adecuado de RuntimeException?

Cuando debo obtener una excepción a RuntimeException en lugar de Exception?

Un RuntimeException no tiene que ser declarado en la cláusula de un método throws, que puede ser buena ya que no tiene que figuren específicamente o mal porque es una buena práctica para declarar explícitamente una excepción del método

¿Pensamientos?

+2

Duplicate http://stackoverflow.com/questions/499437/in-java-when-should-i-create-a-checked-exception-and-when-should-it-be-a-runtim –

Respuesta

43

De Unchecked Exceptions -- The Controversy:

Si un cliente puede esperar razonablemente para recuperarse de una excepción, hacen que sea una excepción comprobada. Si un cliente no puede hacer nada para recuperarse de la excepción , conviértalo en una excepción sin marcar.

Tenga en cuenta que una excepción sin control es uno derivado de RuntimeException y una excepción comprobada es uno derivado de Exception.

¿Por qué lanzar un RuntimeException si un cliente no puede hacer nada para recuperarse de la excepción?El artículo explica:

excepciones de tiempo de ejecución representan problemas que son el resultado de una programación problema, y ​​como tal, el código de cliente API no es razonable esperar que recuperarse de ellos o para manejarlos en cualquier camino. Tales problemas incluyen excepciones aritméticas, como dividiendo por cero; excepciones de puntero, , como intentar acceder a un objeto a través de una referencia nula; e indexar excepciones, como intentar acceder a un elemento de matriz mediante un índice que es demasiado grande o demasiado pequeño.

8

Hay muchos escenarios en el desarrollo de aplicaciones empresariales que se necesita usar RuntimeException en lugar de la excepción, siguientes son dos de esos escenarios que son bastante comunes:

  • bien la aplicación de manejo de excepciones como un aspecto (que separa el principio de empresa de diseño), en la mayoría de los frameworks modernos, usted declararía manejar excepciones y asociaría bloques específicos de manejo de excepciones en lugar de hardcoding. Un buen ejemplo de esto es la plantilla JDBC en Spring que convierte todas las excepciones de SQL en RuntimeException para que el desarrollador no escriba try catch blocks mientras escribe lógica de acceso a datos. puede definir el manejador de excepciones declarativamente que puede proporcionar un comportamiento diferente en dev env. y diferente comportamiento en la producción. Implementación similar existe en la clase de acción Struts 1.x también, donde el método de ejecución se declara para lanzar Exception y hay un ExceptionHandler por separado mapeado en struts-config para manejar excepciones específicas. Aunque este no es un ejemplo de RuntimeException, el principio de diseño es el mismo para separar la preocupación de la ejecución normal y el manejo de excepciones.
  • Otro uso de RuntimeException es en EJB y otros Administradores de transacciones donde las transacciones son controlador por contenedor. En este tipo de contenedores por convención, si tiras RuntimeException dentro de su código de la transacción sería deshacer - el mismo no ocurriría si tiras Excepción

Estos son 2 escenarios que vienen inmediatamente a la mente habría otros escenarios de- curso.

Cuestiones relacionadas