Los errores de tiempo de ejecución de Java más comunes
Los errores de tiempo de ejecución ocurren cuando un programa no contiene ningún error de sintaxis pero le pide a la computadora que haga algo que la computadora no puede hacer de manera confiable . Durante la compilación, el compilador no tiene ninguna técnica para detectar este tipo de errores. Es la JVM (Java Virtual Machine) la que lo detecta mientras se ejecuta el programa.
· Excepción StackOverflowError
· Excepción OutOfMemoryError
· NegativeArraySizeException
· ArithmeticException
· ArrayIndexOutOfBoundsException
· ArrayStoreException
· UnsupportedOperationException
· NoSuchElementException
· ClassCastException
· DateTimeException
· ConcurrentModificationException
· InputMismatchException
· IllegalFormatConversionException
· NumberFormatException
· InvalidParameterException
· NullPointerException
Excepción StackOverflowError
StackOverflowError es un error que Java no permite detectar, por ejemplo, cuando la pila se queda sin espacio, ya que es uno de los errores de tiempo de ejecución más comunes que uno puede encontrar.
La causa principal de StackOverflowError es que no hemos proporcionado la condición de terminación adecuada para nuestra plantilla o función recursiva , lo que significa que se convertirá en un bucle infinito . Entonces, este error se produce cuando Java se queda sin memoria disponible.
// Java program to demonstrate
// infinite recursion error
public class StackOverflowErrorClass {
static int i = 0;
// Method to print numbers
public static int printNumber(int x)
{
i = i + 2;
System.out.println(i);
return i + printNumber(i + 2);
}
public static void main(String[] args)
{
// Recursive call without any
// terminating condition
StackOverflowErrorClass.printNumber(i);
}
}
RunTime Error in java code :- Exception in thread “main” java.lang.StackOverflowError
at java.io.PrintStream.write(PrintStream.java:526)
at java.io.PrintStream.print(PrintStream.java:597)
at java.io.PrintStream.println(PrintStream.java:736)
at StackOverflowErrorClass.printNumber(StackOverflowErrorClass.java:13)
at StackOverflowErrorClass.printNumber(StackOverflowErrorClass.java:14)
at StackOverflowErrorClass.printNumber(StackOverflowErrorClass.java:14)
.
.
.
Excepción OutOfMemoryError
Espacio insuficiente/error de memoria (java.lang.OutOfMemoryError) en subprocesos
Un java.lang.OutOfMemoryError es un error de tiempo de ejecución en Java que ocurre cuando la máquina virtual de Java ( JVM ) no puede asignar un objeto debido a espacio insuficiente en el almacenamiento dinámico de Java. Java Garbage Collector ( GC ) no puede liberar el espacio necesario para un nuevo objeto, lo que provoca un java.lang.OutOfMemoryError . Este error también se puede producir cuando la memoria nativa no es suficiente para soportar la carga de una clase Java.
Aquí hay un ejemplo de un lanzamiento debido a un espacio de almacenamiento dinámico de Java insuficiente:
public class OutOfMemoryErrorExample {
public static void main(String[] args) {
Integer[] myArray = new Integer[1000 * 1000 * 1000];
}
}
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at OutOfMemoryErrorExample.main(OutOfMemoryErrorExample.java:8)
NegativeArraySizeExceptionNegativeArraySizeExceptionNegativeArraySizeException
NegativeArraySizeException es una excepción de tiempo de ejecución en Java que ocurre cuando una aplicación intenta crear una matriz con un tamaño negativo . Dado que NegativeArraySizeException es una excepción no verificada (extiende RuntimeException ), no es necesario declararla en la cláusula throws de un método o constructor.
Los desarrolladores deben establecer el tamaño de la matriz en un número entero positivo. Si se desliza un signo menos en la declaración del tamaño de la matriz, se genera la excepción NegativeArraySizeException.
class JavaError {
public static void main(String[] args) {
int[] arr = new int[-5]; // Negative size of the array
arr[8] = 89;
System.out.println("Something went wrong!");
}
}
java -cp /tmp/UDRgGsLLQ6 JavaError
Exception in thread "main" java.lang.NegativeArraySizeException: -5
at JavaError.main(JavaError.java:4)
excepción aritmética
ex. dividir por cero errores
La manipulación de datos es una función principal de la mayoría de las aplicaciones Java. Cuando la manipulación de datos incluye la división, los desarrolladores deben tener cuidado con la división por cero . Si cero alguna vez se convierte en el denominador en un cálculo, Java lanza una ArithmeticException. Entonces, no podemos dividir nada desde cero, así que cuando intentamos hacer eso, obtenemos una excepción aritmética en tiempo de ejecución.
class JavaError {
public static void main(String[] args) {
int a = 23;
int b = 0;
System.out.println(a / b);
}
}
java -cp /tmp/UDRgGsLLQ6 JavaError
Exception in thread "main" java.lang.ArithmeticException: / by zeroat JavaError.main(JavaError.java:7)
ArrayIndexOutOfBoundsExceptionArrayIndexOutOfBoundsException
cuando se accede a un elemento inexistente en una matriz
Una matriz en Java requiere un tamaño establecido. Si intenta agregar más elementos de los que puede acomodar la matriz, esto dará como resultado la excepción ArrayIndexOutOfBoundsException . El siguiente código intenta agregar un elemento al índice ocho de una matriz que se creó para contener solo cinco elementos:
Accediendo al índice de matriz que no existe:
class JavaError {
public static void main(String[] args) {
String[] arr = new String[5];
arr[6] = "Hi"; // Accessing array index that does not exsist
System.out.println("Something went wrong!");
}
}
java -cp /tmp/UDRgGsLLQ6 JavaError
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 6 out of bounds for length 5
at JavaError.main(JavaError.java:6)
Java aplica el conteo basado en cero a los elementos de una matriz, por lo que el índice 6 de una matriz se referiría al séptimo elemento. Incluso el siguiente código activaría una ArrayIndexOutOfBoundsException en Java, ya que el índice 4 es una referencia al quinto elemento de una matriz:
String[] arr = new String[5];
arr[5] = "Hi"; // Accessing array index that does not exsist
ArrayStoreException
ArrayStoreException comparte similitudes con ClassCastException. Esta excepción de tiempo de ejecución de Java ocurre cuando se coloca el tipo de objeto incorrecto en una matriz.
En el siguiente ejemplo, se crea una matriz BigInteger, seguida de un intento de agregar un Double. Double no comparte una relación con BigInteger, por lo que desencadena una ArrayStoreException en tiempo de ejecución.
Number[] bigInt = new BigInteger[5];
bigInt[0] = Double.valueOf(12345);
BigInteger[] bigInt = new BigInteger[5];
bigInt[0] = Double.valueOf(12345); // Java compile error
UnsupportedOperationException
Los programadores de Java a menudo usan la clase Arrays para transformar una matriz de Java en una lista más fácil de usar. Sin embargo, la Lista que devuelve Java es de solo lectura. Los desarrolladores que desconocen este hecho e intentan agregar nuevos elementos se encuentran con la UnsupportedOperationException. Este ejemplo muestra cómo sucede esto:
Integer[] data = {1,2,3,5,8,13,21};
List<Integer> list = Arrays.asList(data);
list.add(new Integer(0));
NoSuchElementException
No puede iterar a través de un iterador vacío. El siguiente código, que intenta obtener el siguiente elemento en un HashSet vacío, genera una NoSuchElementException.
Set set = new HashSet();
set.iterator().next(); // Java runtime exception thrown
if (!set.isEmpty()) {
set.iterator().next();
}
para errores de conversión de tipos de datos
Java es un lenguaje fuertemente tipado. Hace cumplir estrictamente las jerarquías de tipos y no proyectará un objeto a otro a menos que compartan una relación polimórfica. Entonces, ClassCastException ocurre cuando intenta convertir incorrectamente un objeto a una clase en particular. Esto significa que su objeto no es una instancia o una subclase de esta clase.
En el siguiente código, el intento de convertir el objeto Date en una marca de tiempo genera un error ClassCastException en tiempo de ejecución.
Date today = new Date();Timestamp time = (Timestamp)today;
long seconds = System.currentTimeMillis();
Timestamp time = new Timestamp(seconds);
Date today = (Date)time; // this cast works
Excepción de fecha y hora
La manipulación de datos es una tarea complicada. Las zonas horarias, las líneas de fecha y los formatos de fecha incoherentes pueden hacer que Java genere varias excepciones de fecha y hora en tiempo de ejecución.
Por ejemplo, el código siguiente se compila, pero el campo HourOfDay de la clase LocalDate hará que falle el intento de formatear la fecha.
LocalDate now = LocalDate.now();
DateTimeFormatter.RFC_1123_DATE_TIME.format(now);
LocalDate now = LocalDate.now();
DateTimeFormatter.ISO_DATE.format(now);
para cálculos paralelos implementados incorrectamente
El método asList de la clase Arrays no es la única vez que una colección requiere el tratamiento de solo lectura.
Cuando itera sobre una lista, la colección subyacente debe corregirse y no actualizarse. Por lo tanto, el método add dentro del siguiente fragmento de código genera una ConcurrentModificationException.
List servers = new ArrayList();
servers.add("Tomcat");
Iterator<String> iterator = servers.iterator();
while (iterator.hasNext()) {
String server = iterator.next();
servers.add("Jetty"); // throws a Runtime Exception
}
InputMismatchException
la excepción InputMismatchException generalmente ocurre cuando se trabaja con programas Java que solicitan a los usuarios que ingresen información usando la clase Scanner . Esta excepción generalmente se produce durante la entrada del usuario cuando espera un cierto tipo de entrada y el usuario ingresa un tipo diferente de entrada. En otras palabras, esta excepción puede ocurrir cuando la entrada no es válida para el tipo esperado. La entrada no coincide con el patrón del tipo esperado o está fuera de rango.
Como pasar datos no válidos, por ejemplo, pasar un valor numérico al campo no numérico. Por ejemplo, si un programa espera un valor Integer para una entrada pero el usuario ingresa un valor String en su lugar, se lanza una InputMismatchException .
Solución : envuelva el código que solicita la entrada del usuario en un bucle while que le pedirá continuamente al usuario que ingrese la entrada correcta.
Excepción de conversión de formato ilegal
Explicación : esto está asociado con printf() y String.format() . Significa que hay un marcador de posición no asociado (demasiados marcadores de posición, argumentos insuficientes) o es el marcador de posición incorrecto para el tipo en los argumentos. Por ejemplo, si %s es un marcador de posición para un número entero, se generará este error.
Solución : asegúrese de que la cantidad de marcadores de posición coincida con la cantidad de argumentos y asegúrese de que los marcadores de posición sean del tipo correcto.
NumberFormatException
Intentando convertir una cadena no válida en un número
La excepción NumberFormatException se produce cuando se intenta convertir una cadena con un formato incorrecto en un valor numérico. Eso significa que, cuando no es posible convertir una cadena en ningún tipo numérico (float, int, etc.), se lanza esta excepción. Es una excepción de tiempo de ejecución (excepción no verificada) en Java. Es una subclase de la clase IllegalArgumentException .
Excepción de parámetro no válido
Pasar parámetros/argumentos no válidos a un método
Esta excepción, es una subclase de IllegalArgumentException diseñada para que la usen las clases del motor JCA/JCE, se genera cuando se pasa un parámetro no válido a un método .
Excepción de puntero nulo
La NullPointerException es una RuntimeException muy común que encuentran las aplicaciones Java. esta excepción se lanza cuando Java encuentra una referencia nula cuando no la espera. y un desarrollador de Java escribe código que invoca un método en esta referencia (objeto no inicializado).
String data = null;
System.out.println( data.length() ); // throws NullPointerException
Para evitar esta RuntimeException en sus programas Java, inicialice todos los objetos que cree antes de usarlos y realice una verificación nula en cualquier objeto que una biblioteca externa pase a sus programas.
Apoya nuestra publicación siguiéndola
Eche un vistazo a los errores de tiempo de ejecución de Java Maximizar el potencial de su equipo: cómo mantener ocupado a su equipo de entrega de software Preguntas más frecuentes de la entrevista basada en flujo de Java8: parte final Cómo crear un proyecto simple de Quarkus con integración de base de datos ¿ Qué es el encadenamiento de excepciones en Java? Manejo de excepciones Gano $ 300 escribiendo un libro en 2 días: así es como 10 formas simples pero efectivas de mejorar su calidad de vida Primeros pasos con Spring Boot: un tutorial completo para principiantes
![¿Qué es una lista vinculada, de todos modos? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































