number - tipos de excepciones en java
¿Por qué NumberFormatException es el tiempo de ejecución? (5)
¿Por qué es NumberFormatException un error de tiempo de ejecución? Bueno, si tiene un cuadro de diálogo donde el usuario ingresa un valor, y el valor no es un número pero se analiza como tal, entonces querría saberlo. ¿Es una excepción la mejor manera? Tal vez no, pero es lo que es.
Las excepciones de tiempo de ejecución indican contratos rotos (como NPE) y nunca deben lanzarse si el código no tiene errores. Siempre indica un error en el código (igual que las afirmaciones, pero las afirmaciones son para los errores de clase internos, mientras que el Tiempo de ejecución es para los errores del cliente de la clase).
Las excepciones en tiempo de ejecución nunca deben ser detectadas.
Las excepciones marcadas, por otro lado, son parte de la firma y deben ser detectadas y procesadas. Pueden indicar errores de entrada del usuario o problemas de recursos externos (como IOException
).
Con todo eso, no entiendo por qué la NumberFormatException
es el tiempo de ejecución.
En cierto sentido, NumberFormatException
es una excepción en tiempo de compilación. Pero en lugar de ser lanzado por el compilador de Java, es lanzado por el analizador / compilador de cadenas de formato cuando su programa lo ejecuta. Lo mismo se aplica al Pattern
y otros usos de las expresiones regulares; su programa está ejecutando el analizador / compilador.
En primer lugar, quien te lo haya dicho.
Las excepciones en tiempo de ejecución nunca deben ser capturadas
No sabe mucho sobre Java. No los escuches, están equivocados.
La excepción NumberFormatException es una excepción en tiempo de ejecución: las excepciones no seleccionadas se eligen porque indican un error de programación . Es posible saber antes de llamar a Integer.parseInt()
(por ejemplo) que una Cadena es un número entero válido, por ejemplo, aquí solo hay una forma:
if (str.matches("^//d{1,8}$") {
int myInt = Integer.parseInt(str); // will never throw NumberFormatException
}
Por lo tanto, se puede considerar un error de programación para obtener uno, el programador optó por no verificar primero.
Si no está seguro de la integridad / calidad de la cadena que está a punto de analizar, es fácil de entender:
try {
// parse your string
} catch (NumberFormatException e) {
// do something about it
}
La otra razón para convertirlo en un tiempo de ejecución es que no desordena el código con bloques try/catch
potencialmente innecesarios, si está seguro de que no obtendrá uno, por ejemplo, si confía totalmente en la fuente de los datos de String.
NumberFormatException extiende IllegalArgumentException. La razón por la que esto es una excepción de tiempo de ejecución es que es completamente posible romper el contrato de un método que toma una String
y devuelve un Number
. Si paso 123D
y no hay una validación adecuada de los datos, este sería un argumento ilegal apropiado.
NumberFormatException
también se puede lanzar al analizar los archivos de configuración, en cuyo caso sería un error del programador. Al analizar la entrada del usuario, usualmente está utilizando NumberFormat
que lanza una ParseException
.