me dijeron que en Java, excepciones sin marcar, pueden quedar atrapados en un bloque try, pero si se detecta a, no se llama una excepción comprobada?¿No se trata de una excepción no verificada que está atrapada en un intento bloquear una excepción marcada en Java?
Respuesta
Las excepciones no verificadas son excepciones que no necesitan ser atrapadas en un bloque try
- catch
. excepciones sin marcar son subclases de las clases RuntimeException
o Error
.
Las excepciones comprobadas son excepciones que deben capturarse en un bloque try
- catch
.
La definición de excepciones marcado y sin marcar se pueden encontrar en Section 11.2: Compile-Time Checking of Exceptions de The Java Language Specification:
Las clases de excepciones sin marcar son la clase
RuntimeException
y su subclases, y la claseError
y sus subclases. Todas las demás clases de excepción son clases de excepciones comprobadas.
El hecho de que una excepción no comprobada está atrapado en un bloque catch
no significa que sea una excepción comprobada - sólo significa que la excepción no comprobada fue capturado, y se manejó en el bloque catch
.
Uno podría catch
una excepción sin control, y luego throw
una nueva excepción comprobada, por lo que cualquier método de llamada que método en el que una excepción sin control podría ocurrir y forzar un método que llama para manejar algún tipo de excepción.
Por ejemplo, un NumberFormatException
que puedan ser proyectados al manejar algunos no se puede analizar con el método String
Integer.parseInt
es una excepción sin control, por lo que no tiene que ser capturado. Sin embargo, el método de llamar a ese método puede querer su llamador manejar adecuadamente un problema de este tipo, por lo que puede tirar otra excepción que se comprueba (no es una subclase de RuntimeException
.):
public int getIntegerFromInput(String s) throws BadInputException {
int i = 0;
try {
i = Integer.parseInt(s);
catch (NumberFormatException e) {
throw new BadInputException();
}
return i;
}
En el ejemplo anterior, un NumberFormatException
está atrapado en el try
- bloque catch
, y un nuevo BadInputException
(que está destinada a ser una excepción comprobada) se lanza.
Cualquier persona que llame al método getIntegerFromInput
se verá obligada a tomar un BadInputException
y forzarlo a manejar entradas incorrectas. Si el NumberFormatException
no iban a ser capturados y manipulados, las personas que llaman a este método tendrían que manejar la excepción correctamente.
(Además, hay que señalar, comer una excepción y hacer algo que no es realmente significativo no se considera una buena práctica -. Manejar excepciones en las que el manejo de excepciones significativas se puede realizar)
De La Tutoriales de Java :
- Lessons: Exceptions
- The Catch or Specify Requirement - discute excepciones comprobadas.
- Chained Exceptions - la práctica de atrapar una excepción y lanzar una nueva, como en el ejemplo anterior.
- Unchecked Exceptions — The Controversy
+1 por 'comer una excepción y hacer algo que no es realmente significativo no se considera una buena práctica: manejar excepciones donde se pueda realizar un manejo de excepción significativo' –
creo que la distinción es que el compilador marcará sin capturar las excepciones comprobadas y métodos que generan excepciones comprobadas, pero no declaran en la firma del método en tiempo de compilación.
Las excepciones no verificadas no requieren declaración ni captura, pero ninguna está prohibida. El compilador simplemente no los identifica como errores.
No, no se denomina excepción comprobada solo porque está atrapada. Se puede escribir un bloque catch para detectar cualquier tipo de excepción o error. Las excepciones controladas son aquellas que están sujetas al Catch or Specify Requirement, lo que significa que usted es requerido para atraparlas o declarar que su método puede arrojarlas. Puede pensar en el término marcado en el sentido de que el compilador verificará para asegurarse de cumplir con la captura o especificar el requisito. Los errores y las Excepciones de Runtime se llaman excepciones sin marcar porque el compilador no impone este requisito en ellas.
- 1. ¿Está marcada la clase de excepción java?
- 2. ¿Por qué NullPointerException no se declara como una excepción marcada?
- 3. ¿Por qué la excepción .net no está atrapada?
- 4. Cómo lanzar una excepción marcada de un hilo de Java?
- 5. java: no se puede volver a lanzar una excepción: no controlada tipo de excepción Excepción
- 6. ¿Por qué la excepción de tiempo de ejecución es una excepción no marcada?
- 7. Excepción: intento de adquirir una referencia en un cierre SQLiteClosable
- 8. ¿Cómo puede la excepción atrapada ser nula (no NullReferenceException)?
- 9. Hibernate está * NO * lanzando una excepción (creo que debería)
- 10. Mockito se rehúsa a arrojar una excepción marcada
- 11. ¿Excepción marcada Java no en la especificación de lanzamiento de la función?
- 12. una excepción win32 no controlada en w3wp.exe
- 13. Cómo pasar la excepción atrapada en la captura interna a la captura externa en una captura de intento anidada
- 14. Excepción de Java no detectada
- 15. Java: ¿por qué no puedo lanzar una excepción en Comparator?
- 16. generar una excepción en jinja si pasamos una variable que no está presente en la plantilla
- 17. ¿Reemplazar una excepción marcada con una excepción de tiempo de ejecución?
- 18. Excepción de Java no detectada
- 19. Cómo simular una excepción no controlada en Java
- 20. ¿Es posible crear mi propia excepción no revisada en Java?
- 21. Hibernate "no está correlacionada" excepción
- 22. ¿Está volviendo a lanzar una excepción legal en un intento anidado?
- 23. ¿Hay alguna forma de evitar que una excepción SystemExit generada a partir de sys.exit() quede atrapada?
- 24. Cómo afirmar que una función no genera una excepción
- 25. En Java, ¿cómo serializo una clase que no está marcada como Serializable?
- 26. DateTime.Now está lanzando una excepción
- 27. PHPUnit afirman que se lanzó una excepción?
- 28. Manejo de una excepción de Python que se produce dentro de una cláusula de excepción
- 29. Epson Java Pos ADK Excepción: No se ha inicializado
- 30. Excepción SQLite hay tal columna cuando se trata de seleccionar
La ironía de "comprobado" ... – Pacerier