How To Handle Exceptions From Static Code Block in Java ¿Cómo manejar las excepciones de bloque de código estático en Java
Exception can be handled when thrown in a method by either passing through the Exception or handling it. Excepción pueden ser manipulados cuando arrojados a un método por cualquiera que pase por la excepción o la manipulación. However in a static code block how can you handle checked exceptions meaningfully? Sin embargo en un bloque de código estático ¿cómo se puede manejar de manera significativa comprobado excepciones?
Normally static blocks are used to execute a code only once globally (for all instances of the class). Normalmente estática bloques se usan para ejecutar un código sólo una vez a nivel mundial (por todas las instancias de la clase). A popular example is loading the JDBC driver. Un ejemplo popular es la carga controlador JDBC. Sometimes the code in static block throws checked Exceptions which needs to be handled. A veces el código estático en bloque arroja excepciones comprobado que las necesidades para ser manipulados. Simple try-catch block doesn’t do justice to the problem as normally failure in static code block means the program cannot continue. Simple intentar la captura incidental de bloque no hace justicia al problema puesto que normalmente el fracaso en bloque de código estático significa que el programa no puede continuar.
A clean way to handle it is using a try-catch block. However after logging appropriate error messages you should throw a RuntimeException. Una forma limpia de manejar es mediante una prueba de captura bloque. Sin embargo, tras la tala adecuada los mensajes de error que debería lanzar una RuntimeException. The normally ends the program execution. El general, finaliza la ejecución del programa.
Update: After logging the exception you have two options. Actualización: Después de la tala la excepción tiene dos opciones. You can either throw a RuntimeException which will end the current thread (unless caught by code instantiating / calling a static method on the class for the first time) or better yet you can call System.exit(1). Puede o bien lanzar una RuntimeException que pondrá fin a la actual hilo (a menos que sea sorprendido por el código instanciar / llamar a un método estático en la clase por primera vez) o mejor aún puede llamar a System.exit (1). RuntimeException will end a single threaded application[Laszlo] (exception noted above). RuntimeException pondrá fin a una única aplicación con hilos [Laszlo] (excepción se ha señalado anteriormente). In JDK 1.5 throwing RuntimeException from main thread gives a pretty descriptive message: En JDK 1,5 tirar RuntimeException de hilo principal da un mensaje bastante descriptivo:
Caused by: java.lang.RuntimeException: Error! Causados por: java.lang.RuntimeException: Error!
at TestStaticException. a TestStaticException. (TestStaticException.java:3) (TestStaticException.java: 3)
At this point it may be argued that System.exit(1) is not desirable in a managed environment like a servlet and I agree. En este punto se puede afirmar que System.exit (1) no es deseable en un entorno administrado como un servlet y estoy de acuerdo. System.exit is for java applications and only if the static initializer block performs some critical (without which the program cannot be run successfully) function like loading the database driver. System.exit es para aplicaciones java y sólo si el bloque static initializer realiza algunas críticas (sin la cual el programa no puede ser ejecutado con éxito) la función de carga como el conductor de bases de datos. RuntimeException may be consumed in a managed environment. RuntimeException puede ser consumida en un entorno administrado. So a third option is to set a flag indicating failure. Por lo tanto, una tercera opción es establecer una bandera que indica fracaso. Later the constructors can check the flag and throw exceptions [Robert] or retry in rare cases. Más tarde, los constructores pueden comprobar la bandera y lanzar excepciones [Robert] o vuelve a intentarlo dentro de pocos casos.
If the operation is not important to the functioning of the program (like setting fonts or laf) then maybe a simple log entry is all that is required. Si la operación no es importante para el funcionamiento del programa (como el establecimiento de tipos de letra o laf), entonces tal vez un simple registro de entrada es todo lo que se requiere.
Filed under Filed under Headline News Headline News , How To Cómo , Java Software El software de Java , Tech Note Nota técnica | |
| |
RSS 2.0 RSS 2,0 | |
Trackback this Article | este artículo |
Email this Article Enviar artículo
You may also like to read También puede leer |




July 6th, 2006 at 5:46 pm 6 de Julio, 2006 a las 5:46 pm
That would end the thread and not program execution. Eso pondría fin al hilo y no la ejecución del programa. (It may result in program termination if you have only one thread.) I guess you know it, but it is more correct put this way :). (Se puede dar lugar a la terminación del programa si tiene un solo hilo.) Supongo que usted lo sepa, pero es más correcto poner de esta manera:).
July 6th, 2006 at 11:57 pm 6 de Julio, 2006 a las 11:57 pm
You are right. Tiene usted razón. The statement is ambiguous. La declaración es ambigua. I will clarify it. Voy a aclararlo.
July 7th, 2006 at 12:26 am 7 de julio de 2006, a las 12:26 am
The advice on how to handle exceptions in static blocks is actually quite dangerous. El asesoramiento sobre la forma de manejar excepciones en bloques estática es bastante peligroso. See Ver http://twasink.net/blog/archives/2006/07/how_not_to_hand.html for more para más
(This would have been a trackback, but trackbacks don’t seem to show up here) (Esto habría sido un trackback, trackbacks, pero no parecen poner de manifiesto hasta aquí)
July 7th, 2006 at 8:26 am 7 de julio de 2006, a las 8:26 am
I have tried to address the concerns raised. He tratado de abordar las inquietudes planteadas.
July 11th, 2006 at 7:35 pm 11 de julio de 2006, a las 7:35 pm
Why not throw an ExceptionInInitializerError()? ¿Por qué no lanzar una ExceptionInInitializerError ()?
static { static (
try { try (
// do something that may throw an exception / / Hacer algo que pueda lanzar una excepción
} catch (ComponentXmlException ex) { ) Capturas (ComponentXmlException ex) (
throw new ExceptionInInitializerError(ex); lanzar nuevos ExceptionInInitializerError (ex);
} )
} )
August 3rd, 2006 at 5:16 pm 3 de agosto de 2006, a las 5:16 pm
can you send me to my email some smples of a handle exception…..plzzzzzzzzzz app or more pueden enviarme a mi correo electrónico algunas smples un manejador de excepción… .. plzzzzzzzzzz app o más
August 3rd, 2006 at 5:17 pm 3 de agosto de 2006, a las 5:17 pm
oh my email is Oh mi correo electrónico es dielli89@hotmail.com
September 13th, 2007 at 3:21 am Septiembre 13, 2007 a las 3:21 am
sir i want the details of java . sir i quieren los detalles de java.
it is here to know about the subject of java. está aquí para saber sobre el tema de java.
so iam surfing here. a fin de IAM surf aquí.
thankyou. gracias.