En Java, podemos crear nuestras propias excepciones que son clases derivadas de la clase Exception. La creación de nuestra propia excepción se conoce como excepción personalizada o excepción definida por el usuario. Básicamente, las excepciones personalizadas de Java se utilizan para personalizar la excepción según las necesidades del usuario.
Considere el ejemplo 1 en el que la clase InvalidAgeException extiende la clase Exception.
Usando la excepción personalizada, podemos tener su propia excepción y mensaje. Aquí, hemos pasado una cadena al constructor de la superclase, es decir, la clase de excepción que se puede obtener usando el método getMessage() en el objeto que hemos creado.
En esta sección, aprenderemos cómo se implementan y utilizan las excepciones personalizadas en los programas Java.
¿Por qué utilizar excepciones personalizadas?
Las excepciones de Java cubren casi todo el tipo general de excepciones que pueden ocurrir en la programación. Sin embargo, a veces necesitamos crear excepciones personalizadas.
A continuación se detallan algunas de las razones para utilizar excepciones personalizadas:
- Detectar y proporcionar un tratamiento específico a un subconjunto de excepciones de Java existentes.
- Excepciones de lógica empresarial: estas son las excepciones relacionadas con la lógica empresarial y el flujo de trabajo. Es útil para los usuarios o desarrolladores de la aplicación comprender el problema exacto.
Para crear una excepción personalizada, necesitamos extender la clase Exception que pertenece al paquete java.lang.
Considere el siguiente ejemplo, donde creamos una excepción personalizada denominada WrongFileNameException:
public class WrongFileNameException extends Exception { public WrongFileNameException(String errorMessage) { super(errorMessage); } }
Nota: Necesitamos escribir el constructor que toma la Cadena como mensaje de error y se llama constructor de clase principal.
Ejemplo 1:
Veamos un ejemplo sencillo de excepción personalizada de Java. En el siguiente código, el constructor de InvalidAgeException toma una cadena como argumento. Esta cadena se pasa al constructor de la clase principal Exception utilizando el método super(). Además, se puede llamar al constructor de la clase Exception sin utilizar un parámetro y no es obligatorio llamar al método super().
TestCustomException1.java
// class representing custom exception class InvalidAgeException extends Exception { public InvalidAgeException (String str) { // calling the constructor of parent Exception super(str); } } // class that uses custom exception InvalidAgeException public class TestCustomException1 { // method to check the age static void validate (int age) throws InvalidAgeException{ if(age <18){ throw an object of user defined exception new invalidageexception('age is not valid to vote'); } else { system.out.println('welcome main method public static void main(string args[]) try calling the validate(13); catch (invalidageexception ex) system.out.println('caught exception'); printing message from invalidageexception system.out.println('exception occured: ' + ex); system.out.println('rest code...'); < pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/exception-handling/13/java-custom-exception.webp" alt="Java Custom Exception"> <h3>Example 2:</h3> <p> <strong>TestCustomException2.java</strong> </p> <pre> // class representing custom exception class MyCustomException extends Exception { } // class that uses custom exception MyCustomException public class TestCustomException2 { // main method public static void main(String args[]) { try { // throw an object of user defined exception throw new MyCustomException(); } catch (MyCustomException ex) { System.out.println('Caught the exception'); System.out.println(ex.getMessage()); } System.out.println('rest of the code...'); } } </pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/exception-handling/13/java-custom-exception-2.webp" alt="Java Custom Exception"> <hr></18){>
Producción:
18){>