Differentiate among checked exceptions, unchecked exceptions, and Errors

Em Java, as exceções são categorizadas em três tipos principais: checked exceptions, unchecked exceptions e errors. Vamos diferenciar entre eles:

  1. Checked Exceptions (Exceções Verificadas):
  • São exceções que o compilador obriga a serem tratadas ou declaradas no método que as lança, seja usando um bloco try-catch ou declarando a exceção no método com a cláusula throws.
  • São subclasses de Exception (exceto RuntimeException e suas subclasses).
  • Exemplos comuns incluem IOException, SQLException e ClassNotFoundException.
   // Exemplo de exceção verificada (IOException)
   try {
       FileInputStream file = new FileInputStream("arquivo.txt");
       // Código que manipula o arquivo
       file.close();
   } catch (IOException e) {
       // Tratamento da exceção
       e.printStackTrace();
   }
  1. Unchecked Exceptions (Exceções Não Verificadas):
  • São exceções que não precisam ser declaradas ou tratadas pelo compilador.
  • São subclasses de RuntimeException e suas subclasses.
  • Normalmente resultam de erros de programação e indicam falhas no código que podem ser corrigidas.
  • Exemplos comuns incluem NullPointerException, ArrayIndexOutOfBoundsException e ArithmeticException.
   // Exemplo de exceção não verificada (NullPointerException)
   String texto = null;
   int tamanho = texto.length(); // Lançará NullPointerException
  1. Errors:
  • São problemas graves que geralmente ocorrem fora do controle do programador ou da máquina virtual Java.
  • Não são destinados a serem tratados pelo código do aplicativo, e a maioria indica falhas irrecuperáveis.
  • Exemplos incluem OutOfMemoryError, StackOverflowError e VirtualMachineError.
   // Exemplo de erro (OutOfMemoryError)
   List<byte[]> listaDeBytes = new ArrayList<>();
   while (true) {
       listaDeBytes.add(new byte[1024 * 1024]); // Causará eventualmente OutOfMemoryError
   }

Em resumo, as exceções verificadas são aquelas que o compilador exige que você trate ou declare, as exceções não verificadas são aquelas que podem ser tratadas opcionalmente e os erros são problemas mais graves que geralmente indicam falhas na máquina virtual Java ou em recursos do sistema.