Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Criar uma exception customizada
  2. Adicionar atributo e método
  3. Exception customizada e throws

Para criarmos nossa própria exceção, precisamos declarar uma classe derivada que irá herdar a classe Exception ou outra classe de exceção nativa desejada como ArithmeticException ou ArrayIndexOutOfBoundException, por exemplo.

Sintaxe 1
modificador_acesso class minha_excecao extends excecao_base
{
   //corpo
}

No construtor de nossa exceção customizada, utilizamos um parâmetro para receber uma mensagem de erro customizada e chamamos o construtor da classe super com uso do construtor super como mostrado a seguir:

Sintaxe 2
modificador_acesso class minha_excecao extends excecao_base
{
    public minha_excecao(String mensagem_erro)
    {
        super(mensagem_erro);
    }
}

Como nossa exception herda de Exception e iniciamos usando o super, agora podemos utilizar os métodos getMessage, toString e outros.

Tab 1. : Métodos
Método Descrição
getMessage Retorna mensagem de erro
toString Retorna mensagem de erro formatada
getStackTrace Retorna pilha de execução como string
printStackTrace Imprime a pilha de execução
Exemplo 1
//MinhaException.java
public class MinhaException extends Exception{
    
    public MinhaException(String mgs){
        super(msg);
    }
}
//Main.java
public class Main
{
	public static void main(String[] args){
        try{
           throw new MinhaException("MinhaException");
        }
        catch( MinhaException e ){
            e.getMessage();
        }
	}
}
Saída
MinhaException

As exceções customizadas aceitam métodos e atributos assim como qualquer outra classe que criamos até agora. Tudo estudado sobre atributos, métodos e outros é aplicável também.

Sintaxe: método
modificador_acesso tipo_dado nome_metodo(lista_parametros)
{
    //omitido
}
Sintaxe: atributo
modificador_acesso nome_atributo;
Exemplo 2
//MinhaException.java
public class MinhaException extends Exception{
    private int codigo = -1;

    public int getCodigoErro(){
        return codigo;
    }
    public MinhaException(int cod, String msg){
        super(msg);
        codigo = cod;
    }
}
//Main.java
public class Main
{
	public static void main(String[] args) {
        try {
           throw new MinhaException(999,"Mensagem customizada");
        }
        catch( MinhaException e ){
            System.out.println(e.getCodigoErro());
            System.out.println(e.getMessage());
        }
	}
}
Saída
999
Mensagem customizada

Da mesma forma que podemos declarar que um método que pode lançar alguma das exceções nativas, o mesmo pode ser feito com exceções customizadas usando o throws como já visto.

Exemplo 3
//MinhaException.java
public class MinhaException extends Exception{
    private int codigo = -1;

    public int getCodigoErro(){
        return codigo;
    }
    public MinhaException(int cod, string s){
        super(s);
        codigo = cod;
    }
}
//Main.java
public class Main
{
    public static void metodo() throws MinhaException
    {
        throw new MinhaException(999,"Mensagem de erro"); 
    }
	public static void main(String[] args) {

        try{
           metodo();
        }
        catch( MinhaException e ){
            System.out.println(e.getMessageCustom());
        }
	}
}
Saída
Mensagem de erro
  1. 21/07/2026 - revisão 4 - Ajustes: objetivos, títulos; sintaxes 'Adicionar atributo e método'; Tab. 1; outros pontuais
  2. 25/07/2025 - revisão 3 - Melhorias pontuais; ajustes: sintaxes e objetivos
  3. 24/09/2024 - revisão 2 - Correções em descrição de tópicos; outros ajustes
  4. 08/02/2024 - revisão 1 - correção em navegação e erros gramaticais
  5. 04/09/2023 - versão inicial