Subproceso UncaughtExceptionHandler en Java con ejemplos

Una excepción es un evento no deseado o inesperado que ocurre durante la ejecución de un programa, es decir, en tiempo de ejecución, que interrumpe el flujo normal de las instrucciones del programa.

En este artículo, entenderemos cómo implementar Thread.UncaughtExceptionHandler .

Antes de implementar el controlador, comprendamos cómo las excepciones son causadas por un ejemplo de la siguiente manera:

public class GFG {
  
    public static void main(String args[])
    {
        System.out.println(10 / 0);
    }
}

La salida para el código anterior es

Exception in thread "main"
 java.lang.ArithmeticException:
 / by zero at Demo.main(GFG.java:5)

Sin embargo, si deseamos anular el funcionamiento interno de JVM de modo que se muestre un mensaje personalizado cuando ocurra una excepción, podemos usar Thread.UncaughtExceptionHandler para manejarlo.

El método setDefaultUncaughtExceptionHandler() de la clase java.lang.Thread se usa para anular la forma en que JVM maneja las excepciones no detectadas.

Sintaxis:

public static void setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler eh)

Parámetro: Este método toma como parámetro un objeto del tipo UncaughtExceptionHandler .

A continuación se muestran los ejemplos para ilustrar el método setDefaultUncaughtExceptionHandler():

Ejemplo 1: intentemos crear una clase que implemente la interfaz UncaughtExceptionHandler de la clase Thread para manejar una excepción de división por 0 de la siguiente manera:

// Java program to demonstrate
// the exception handler
  
// Creating a random class to
// implement the interface
class Random
    implements Thread
                   .UncaughtExceptionHandler {
  
    // Method to handle the
    // uncaught exception
    public void uncaughtException(
        Thread t, Throwable e)
    {
  
        // Custom task that needs to be
        // performed when an exception occurs
        System.out.println(
            "Welcome to GeeksforGeeks");
    }
}
  
public class GFG {
  
    public static void main(String[] args)
    {
  
        // Passing the object of the type
        // UncaughtExceptionHandler to the
        // setter method
        // setDefaultUncaughtExceptionHandler()
        Thread
            .setDefaultUncaughtExceptionHandler(
                new Random());
  
        System.out.println(10 / 0);
    }
}

Producción:

Bienvenido a GeeksforGeeks

Nota: El código anterior no funciona en el IDE en línea porque los IDE en línea no otorgan permisos para anular el controlador de excepciones. Aquí, el método setDefaultUncaughtExceptionHandler() cambió el campo defaultUncaughtExceptionHandler del valor inicial nulo a la clase Random. Se invocó el método uncaughtException() de la clase Random , cuando ocurrió la excepción no detectada.

Ejemplo 2: En este ejemplo, lancemos una nueva excepción y comprendamos cómo se manejan las excepciones.

// Java program to demonstrate
// the exception handler
  
// Creating a random class to
// implement the interface
class Random
    implements Thread.UncaughtExceptionHandler {
  
    // Method to handle the
    // uncaught exception
    public void uncaughtException(
        Thread t, Throwable e)
    {
  
        // Custom task that needs to be
        // performed when an exception occurs
        System.out.println(
            "Exception Handled " + e);
    }
}
  
public class GFG {
  
    public static void main(String[] args)
        throws Exception
    {
  
        // Passing the object of the type
        // UncaughtExceptionHandler to the
        // setter method
        // setDefaultUncaughtExceptionHandler()
        Thread.setDefaultUncaughtExceptionHandler(
            new Random());
  
        throw new Exception("Exception");
    }
}

Producción:

Excepción manejada Excepción

Publicación traducida automáticamente

Artículo escrito por abhijeet_rai y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *