Um Objeto De Exceção Possui Na Linguagem Java O Método - A linguagem Java oferece suporte para o tratamento de exceçõ...
A linguagem Java oferece suporte para o tratamento de exceçõ...

O que um objeto de exceção possui na linguagem Java

Quando você trabalha com Java há algum tempo, chega um ponto em que parar para ver a cara de uma exceção no stack trace já não basta mais. Você quer os dados. A mensagem. A causa raiz. E é ai que os métodos da classe Throwable entram.

um objeto de exceção possui na linguagem java o método getMessage()

O método mais óbvio e mais usado é o `getMessage()`. Ele retorna a String que você passou no construtor da exceção. Nada mais, nada menos. Se você fez `new IllegalArgumentException("valor inválido")`, o `getMessage()` devolve `"valor inválido"`. Simples. Mas a classe Throwable tem mais coisas. O `toString()` é outro que todo mundo usa, e ele faz algo diferente do `getMessage()`. Ele concatena o nome completo da classe da exceção, dois pontos, e a mensagem. Então a saída dele é algo como `java.lang.IllegalArgumentException: valor inválido`. Útil quando você precisa identificar qual tipo de exceção foi lançada de forma programática. Tem ainda o `printStackTrace()`, que por padrão escreve no stderr. Você já deve ter visto isso mil vezes. Ele mostra a pilha de execução completa, desde onde a exceção foi lançada até onde foi capturada. O problema é que ele não retorna nada. Ele apenas imprime. Então se você precisa capturar esse dado para logar em um arquivo ou enviar para um serviço de monitoramento, o `printStackTrace()` por si só não te ajuda. A solução real é usar o `Throwable.printStackTrace(PrintWriter pw)` ou `Throwable.printStackTrace(PrintStream ps)` passando um writer ou stream que você controle. Outro método importante que as pessoas esquecem é o `getCause()`. Ele retorna a exceção original que causou a exceção atual. Isso é relevante porque muitas vezes você pega uma exceção de baixo nível e a re lança como uma exceção de alto nível. Se não passar a causa original no construtor usando `super(cause)`, o `getCause()` vai retornar null e você perde a informação de onde tudo começou. Eu tive um problema específico com isso num sistema de integração bancária. Tinha uma camada de serviço que capturava `SQLException` e lancava uma `BusinessException`. O código parecia certo, mas os logs de produção mostravam que os detalhes do erro do banco nunca chegavam aos dashboards de monitoramento. O problema era que no catch eu fazia `throw new BusinessException("erro no banco")` sem passar a exceção original. O `getCause()` simplesmente não tinha nada. A correção foi uma linha: `throw new BusinessException("erro no banco", e)`. A partir dai, o `getCause()` passou a retornar o `SQLException` completo e o monitoring coletava as informações corretamente. O método `getLocalizedMessage()` também existe. Ele é sobrescritível e serve para dar uma versão localizada da mensagem de erro. Na prática, quase todo mundo ignora e continua usando `getMessage()`. Se você não sobrescreveu esse método na sua exceção customizada, o comportamento padrão dele é exatamente igual ao `getMessage()`. Tem ainda o `initCause()`, que permite vincular uma causa a uma exceção mesmo depois dela ter sido instanciada. É útil em cenários onde você cria a exceção em um lugar e só descobre a causa em outro. Na maioria dos casos, passar a causa pelo construtor resolve. O `initCause()` é mais um recurso de emergência do que algo que se usa no dia a dia. A hierarquia básica é: `Throwable` é a raiz. `Exception` e `Error` herdam dele. `RuntimeException` herda de `Exception` e representa exceções que não precisam ser declaradas no throws. Todas elas, sem exceção, trazem esses métodos porque herdam de `Throwable`. Se você quer uma visão programática rápida das informações disponíveis, o `getStackTrace()` retorna um array de `StackTraceElement` com cada frame da pilha. Cada elemento tem o nome do método, arquivo e linha. Isso é útil quando você precisa montar uma mensagem de erro personalizada formatada de um jeito que o `printStackTrace()` padrão não oferece.

Resumo pratico dos métodos mais usados

getMessage() — retorna a mensagem passada no construtor. toString() — retorna "classe: mensagem", bom para logs rápidos.

👉 Clique no botão abaixo para saber mais sobre o assunto!

printStackTrace() — imprime a pilha no stderr, nao retorna valor. getCause() — retorna a exceção causal ou null se nao houver.

getLocalizedMessage() — versão localizavel, igual a getMessage por padrao. getStackTrace() — array de elementos da pilha para manipulacao programatica.

Na vida real, voce provavelmente vai usar getMessage e printStackTrace em 90% dos casos. Mas quando precisa de informacao estruturada, como em um sistema que gera reports automaticos ou integra com ferramentas como ELK ou Datadog, ai sim voce começa a depender do getCause, getStackTrace e das variants com writer/stream do printStackTrace. E nao esquece de sempre passar a excecao original como causa quando estiver re-lancando. Isso evita o tipo de dor de cabeca que eu citei acima, onde os logs de produção simplesmente não mostram o que realmente aconteceu.