Tratamento de exceções em Java

⚡ Resumo Inteligente

Java O tratamento de exceções fornece um mecanismo estruturado para gerenciar erros de tempo de execução que interrompem o fluxo normal do programa. Ele usa as palavras-chave `try`, `catch`, `finally`, `throw` e `throws` para detectar, isolar e recuperar-se de condições excepcionais, mantendo o fluxo normal do programa.ping Aplicações robustas e previsíveis.

  • ⚠️ Exceção definida: Uma exceção é um evento de tempo de execução que interrompe a sequência de execução padrão e é representada como um objeto que descreve a condição de erro.
  • 🧯 Tente pegar o bloco: Envolva o código arriscado em um bloco try e, em seguida, utilize um ou mais blocos catch para capturar tipos específicos de exceção de forma adequada.
  • 🔁 Por fim, comportamento: O bloco `finally` sempre é executado após os blocos `try` e `catch`, sendo ideal para fechar arquivos, sockets ou liberar outros recursos do sistema.
  • ✅ Hierarquia de Exceções: Todas as exceções herdam de Throwable, que se ramifica em Error e Exception, sendo que RuntimeException abrange casos não verificados, como divisão por zero.
  • 🧪 Melhores Práticas: Capture primeiro a exceção mais específica, evite blocos `catch` vazios, registre mensagens significativas e use `multi-catch` para manter o código conciso e de fácil manutenção.

Tratamento de exceções em Java

O que é uma exceção em Java?

An Exceção em Java É um evento que interrompe a execução das instruções de um programa e perturba o fluxo normal de sua execução. Trata-se de um objeto que encapsula as informações de um evento de erro ocorrido dentro de um método e é passado para o sistema de tempo de execução. JavaAs exceções são usadas principalmente para sinalizar diferentes tipos de condições de erro, permitindo que os desenvolvedores respondam a elas de forma controlada.

Existem duas grandes categorias de erros em Java:

  1. Erros de tempo de compilação
  2. Erros de tempo de execução

Os erros de tempo de compilação podem ser classificados em dois tipos adicionais:

  • Erros de sintaxe
  • Erros Semânticos

Exemplo de erros de sintaxe:

Em vez de declarar int a; você erroneamente declarou isso como in a;, para o qual o compilador lançará um erro.

Exemplo de erros semânticos: Você declarou uma variável int a; e depois de algumas linhas de código você declara novamente um número inteiro como int a;. Todos esses erros são destacados quando você compila o código.

Exemplo de erros de tempo de execução

Um erro de tempo de execução é denominado erro de execução. ExceçãoUma exceção é qualquer evento que interrompe o fluxo normal de execução de um programa. Exemplos de exceções incluem exceção aritmética, NullPointerException, exceção de divisão por zero e muitas outras. Java São condições que muitas vezes estão fora do controle direto de um desenvolvedor.

Clique aqui. se o vídeo não estiver acessível

Por que precisamos de tratamento de exceções?

Suponha que você tenha programado um programa para acessar um servidor. Tudo funciona bem durante o desenvolvimento.ping o código em um ambiente local com condições controladas.

Java Manipulação de exceção

Durante uma execução real em produção, o servidor pode estar inativo. Quando seu programa tenta acessá-lo, uma exceção é lançada e, sem o tratamento adequado, o programa será encerrado abruptamente.

Java Manipulação de exceção

Como lidar com uma exceção em Java

Até agora, vimos que uma exceção geralmente está além do controle do desenvolvedor. No entanto, atribuir a falha do código a problemas ambientais não é uma solução real. Você precisa de uma programação robusta que lide com situações excepcionais. Esse tipo de código é conhecido como código de segurança. Manipulador de Exceções.

Em nosso exemplo, um bom tratamento de exceções significaria que, quando o servidor principal estivesse inativo, o programa se conectaria automaticamente a um servidor de backup.

Java Manipulação de exceção

Para implementar isso, você poderia escrever um código para se conectar ao servidor usando as tradicionais condições `if` e `else`. Você verificaria se o servidor está inativo e, em caso afirmativo, escreveria um código para se conectar ao servidor de backup. Essa organização de código usando ramificações "if" e "else" não é eficaz quando seu código possui múltiplas conexões. Java exceções lidar.

class connect{
	if(Server Up){
	 // code to connect to server
	}
	else{
	 // code to connect to BACKUP server
	}
}

Tente pegar o bloco em Java

Java Oferece um mecanismo integrado de tratamento de exceções que separa a lógica normal da lógica de recuperação de erros.

  1. O código normal entra em um EXPERIMENTE bloquear.
  2. O código de tratamento de exceção vai para o CATCH bloquear.

Tente pegar o bloco

Em nosso exemplo, o bloco TRY conterá o código para conectar ao servidor. O bloco CATCH conterá o código para conectar ao servidor de backup. Caso o servidor esteja ativo, o código no bloco CATCH será ignorado. Caso o servidor esteja inativo, uma exceção será lançada e o código no bloco CATCH será executado.

Tente pegar o bloco

Então, é assim que uma exceção é tratada em Java.

Sintaxe para usar try e catch

try{
    statement(s)
}
catch (exceptiontype name){
	statement(s)
}

Exemplo de bloco try-catch

Passo 1) Copie o código a seguir em um editor.

class JavaException {
   public static void main(String args[]){
      int d = 0;
      int n = 20;
      int fraction = n/d;
     System.out.println("End Of Main");
   }
}

Passo 2) Salve o arquivo e compile o código. Execute o programa usando o comando `java`. JavaExceção.

Passo 3) Uma exceção aritmética, divisão por zero, é exibida na linha 5, e a linha 6 nunca é executada.

Passo 4) Agora vamos examinar como o bloco try/catch nos ajudará a lidar com essa exceção. Colocaremos a linha de código que causou a exceção dentro de um bloco catch. tentar bloco, seguido de um captura bloquear. Copie o código a seguir no editor.

class JavaException {
 public static void main(String args[]) {
  int d = 0;
  int n = 20;
  try {
   int fraction = n / d;
   System.out.println("This line will not be Executed");
  } catch (ArithmeticException e) {
   System.out.println("In the catch Block due to Exception = " + e);
  }
  System.out.println("End Of Main");
 }
}

Passo 5) Salve, compile e execute o código. Você obterá a seguinte saída.

Tente pegar o bloco

Como você pode observar, a exceção é tratada e a última linha de código também é executada. Observe também que a linha 7 não será executada porque assim que uma exceção é gerada, o fluxo de controle salta para o bloco catch.

Observação: O objeto ArithmeticException “e” contém informações sobre a exceção ocorrida, o que pode ser útil ao tomar medidas de recuperação.

Java Hierarquia de classes de exceção

Após a execução de uma instrução `catch`, as demais são ignoradas e a execução continua após o bloco `try` e `catch`. Blocos `catch` aninhados devem seguir a hierarquia de exceções, da subclasse mais específica para a classe pai mais geral.

Java Hierarquia de exceção

  • Todas as classes de exceção em Java Estenda a classe Throwable. Throwable possui duas subclasses, Error e Exception.
  • A classe Error define as exceções ou problemas que não são esperados em circunstâncias normais no seu programa, por exemplo, erro de memória, erro de hardware ou erro da JVM.
  • A classe Exception representa as exceções que podem ser tratadas pelo seu programa, e seu programa pode se recuperar dessas exceções usando blocos try e catch.
  • Uma RuntimeException é uma subclasse da classe Exception. Exceções desse tipo representam exceções não verificadas que ocorrem em tempo de execução e não podem ser detectadas em tempo de compilação. Bons exemplos incluem exceção de divisão por zero e exceção de ponteiro nulo.
  • A exceção IOException é gerada durante operações de entrada e saída.
  • Exceção interrompida em Java é gerado durante operações multithread quando uma thread é interrompida.

Exemplo: Aninhamento de blocos try e catch

Passo 1) Copie o código a seguir em um editor.

class JavaException {
 public static void main(String args[]) {
  try {
   int d = 1;
   int n = 20;
   int fraction = n / d;
   int g[] = {
    1
   };
   g[20] = 100;
  }
  /*catch(Exception e){
  	System.out.println("In the catch block due to Exception = "+e);
  }*/
  catch (ArithmeticException e) {
   System.out.println("In the catch block due to Exception = " + e);
  } catch (ArrayIndexOutOfBoundsException e) {
   System.out.println("In the catch block due to Exception = " + e);
  }
  System.out.println("End Of Main");
 }
}

Passo 2) Salve o arquivo e compile o código. Execute o programa usando o comando, Java JavaExceção.

Passo 3) Uma exceção ArrayIndexOutOfBoundsException foi gerada. Altere o valor de int d para 0. Salve, compile e execute o código.

Passo 4) Uma exceção ArithmeticException deve ser gerada.

Passo 5) Remova o comentário das linhas 10 a 12. Salve, compile e execute o código.

Etapa 6) Erro de compilação? Isso ocorre porque `Exception` é a classe base de `ArithmeticException`. Qualquer exceção lançada por `ArithmeticException` também pode ser tratada pela classe `Exception`. Portanto, o bloco `catch` de `ArithmeticException` nunca terá a chance de ser executado, o que o torna redundante. Daí o erro de compilação.

Java Finalmente bloquear

O último bloco é executado independentemente de uma exceção ser levantada no bloco try. Isso é opcional Para usar com um bloco try. O bloco finally é o local correto para liberar recursos como conexões de banco de dados, arquivos ou sockets de rede.

 try {
  statement(s)
 } catch (ExceptiontType name) {

  statement(s)

 } finally {

  statement(s)

 }

Se uma exceção for lançada no bloco try, o bloco finally será executado após a conclusão do bloco catch.

Exemplo de bloco finally

Passo 1) Copie o código a seguir em um editor.

class JavaException {
   public static void main(String args[]){
    try{
       int d = 0;
       int n =20;
       int fraction = n/d;
    }
  catch(ArithmeticException e){
    System.out.println("In the catch block due to Exception = "+e);
  }
  finally{
	System.out.println("Inside the finally block");
  }
}
}

Passo 2) Salve, compile e execute o código.

Passo 3) Resultado esperado: O bloco `finally` é executado mesmo que uma exceção seja lançada.

Passo 4) Altere o valor da variável d = 1. Salve, compile e execute o código e observe a saída.

Melhores Práticas para Java Manipulação de exceção

Seguir algumas regras comprovadas ajudará você a manter seu Java Código resiliente, legível e fácil de depurar:

  • Capture primeiro a exceção mais específica e, em seguida, as mais gerais, para preservar a integridade da hierarquia de exceções.
  • Evite blocos `catch` vazios. No mínimo, registre a exceção para que a causa raiz nunca seja perdida.
  • Utilize o bloco `finally` ou `try` com recursos para liberar arquivos, sockets e conexões de banco de dados.
  • Lance exceções verificadas somente quando o chamador puder se recuperar de forma razoável e use exceções não verificadas para erros de programação.
  • Encapsule exceções de baixo nível em uma exceção de negócio significativa para manter a consistência da API.tracEstá limpo.
  • Em código multithread, nunca ignore silenciosamente a exceção InterruptedException; em vez disso, restaure o sinalizador de interrupção.

Perguntas Frequentes

Exceções verificadas são verificadas em tempo de compilação e devem ser declaradas ou capturadas, como IOException. Exceções não verificadas estendem RuntimeException, ocorrem em tempo de execução e não exigem tratamento obrigatório, como NullPointerException ou ArithmeticException.

O bloco `finally` é sempre executado após os blocos `try` e `catch`, independentemente de ter ocorrido uma exceção ou não. É o local mais seguro para liberar recursos como descritores de arquivo, conexões de banco de dados ou sockets, garantindo o encerramento correto das operações.

A palavra-chave `throw` é usada dentro de um método para efetivamente lançar um objeto de exceção, enquanto `throws` é usada na assinatura de um método para declarar que o método pode passar certas exceções verificadas para o seu chamador para tratamento.

Sim. Um bloco `try` pode ser seguido por um bloco `finally` sem nenhum bloco `catch`. Esse padrão é usado quando o desenvolvedor deseja garantir que o código de limpeza seja executado mesmo que a própria exceção seja propagada para quem chamou o método.

Sim. Ferramentas de observabilidade baseadas em IA analisam a pilha. tracEles usam logs, registros e caminhos de código para prever onde é provável que ocorram exceções em tempo de execução. Sugerem verificações defensivas, recomendam a colocação de blocos `catch` e revelam anomalias, ajudando no gerenciamento de erros.ping As equipes evitam falhas antes que elas cheguem à produção.

Assistentes de IA analisam pilha tracEles correlacionam os problemas com o código-fonte e sugerem possíveis causas raiz e soluções. Geram modelos try-catch, recomendam melhorias no registro de logs e até reescrevem métodos com falhas, reduzindo drasticamente o tempo que os desenvolvedores gastam diagnosticando problemas. Java exceções.

Resuma esta postagem com: