Em Java, podemos criar nossas próprias exceções que são classes derivadas da classe Exception. Criar nossa própria exceção é conhecido como exceção personalizada ou exceção definida pelo usuário. Basicamente, as exceções customizadas Java são usadas para customizar a exceção de acordo com a necessidade do usuário.
Considere o exemplo 1 em que a classe InvalidAgeException estende a classe Exception.
Usando a exceção personalizada, podemos ter sua própria exceção e mensagem. Aqui, passamos uma string para o construtor da superclasse, ou seja, classe de exceção que pode ser obtida usando o método getMessage() no objeto que criamos.
Nesta seção, aprenderemos como exceções customizadas são implementadas e usadas em programas Java.
Por que usar exceções personalizadas?
As exceções Java cobrem quase todos os tipos gerais de exceções que podem ocorrer na programação. No entanto, às vezes precisamos criar exceções personalizadas.
A seguir estão alguns dos motivos para usar exceções personalizadas:
- Capturar e fornecer tratamento específico a um subconjunto de exceções Java existentes.
- Exceções de lógica de negócios: são exceções relacionadas à lógica de negócios e ao fluxo de trabalho. É útil para os usuários do aplicativo ou desenvolvedores entenderem o problema exato.
Para criar uma exceção customizada, precisamos estender a classe Exception que pertence ao pacote java.lang.
Considere o exemplo a seguir, onde criamos uma exceção personalizada chamada WrongFileNameException:
public class WrongFileNameException extends Exception { public WrongFileNameException(String errorMessage) { super(errorMessage); } }
Nota: Precisamos escrever o construtor que recebe String como mensagem de erro e é chamado de construtor da classe pai.
Exemplo 1:
Vamos ver um exemplo simples de exceção customizada Java. No código a seguir, o construtor de InvalidAgeException usa uma string como argumento. Esta string é passada para o construtor da classe pai Exception usando o método super(). Além disso, o construtor da classe Exception pode ser chamado sem usar um parâmetro e chamar o método super() não é obrigatório.
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){>
Saída:
18){>