NetRunner: Java Mastery Guide 1.0 Help

Try-Catch e Finally em Java

Estrutura Básica

try { // Código que pode lançar exceção } catch (ExceptionType e) { // Tratamento da exceção } finally { // Código que sempre executa }

Blocos Try-Catch

Try Block

  • Contém código que pode lançar exceções

  • Pode conter múltiplas linhas

  • Deve ser seguido por catch ou finally

try { int result = 10 / 0; // Lança ArithmeticException System.out.println(result); }

Catch Block

  • Captura e trata exceções específicas

  • Pode ter múltiplos blocos catch

  • Deve ser ordenado do mais específico para o mais genérico

try { // código arriscado } catch (ArithmeticException e) { System.out.println("Erro de divisão: " + e.getMessage()); } catch (Exception e) { System.out.println("Erro genérico: " + e.getMessage()); }

Finally Block

  • Sempre executa, independente de exceção

  • Útil para limpeza de recursos

  • Opcional, mas importante para boas práticas

FileReader reader = null; try { reader = new FileReader("file.txt"); // processar arquivo } catch (IOException e) { System.out.println("Erro ao ler arquivo"); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { // handle close exception } } }

Padrões Comuns

1. Múltiplos Catch

try { // código arriscado } catch (FileNotFoundException e) { // tratamento específico para arquivo não encontrado } catch (IOException e) { // tratamento para outros erros de I/O } catch (Exception e) { // tratamento para qualquer outra exceção }

2. Multi-catch (Java 7+)

try { // código arriscado } catch (IOException | SQLException e) { // tratamento comum para ambas exceções }

3. Rethrow

try { // código arriscado } catch (Exception e) { // log do erro logger.error("Erro durante processamento", e); throw e; // relança a exceção }

Boas Práticas

  1. Seja Específico

// Ruim try { // código } catch (Exception e) { } // Bom try { // código } catch (FileNotFoundException e) { // tratamento específico }
  1. Log Adequado

try { // código } catch (Exception e) { logger.error("Contexto do erro: " + e.getMessage(), e); }
  1. Limpeza de Recursos

Connection conn = null; try { conn = getConnection(); // usar conexão } finally { if (conn != null) { conn.close(); } }

Exemplos Práticos

Exemplo 1: Processamento de Arquivo

public class FileProcessor { public void processFile(String path) { BufferedReader reader = null; try { reader = new BufferedReader(new FileReader(path)); String line; while ((line = reader.readLine()) != null) { processLine(line); } } catch (FileNotFoundException e) { System.err.println("Arquivo não encontrado: " + path); } catch (IOException e) { System.err.println("Erro ao ler arquivo: " + e.getMessage()); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { System.err.println("Erro ao fechar arquivo"); } } } } }

Exemplo 2: Operações de Banco de Dados

public class DatabaseOperations { public void updateRecord(int id, String data) { Connection conn = null; PreparedStatement stmt = null; try { conn = getConnection(); stmt = conn.prepareStatement("UPDATE records SET data = ? WHERE id = ?"); stmt.setString(1, data); stmt.setInt(2, id); stmt.executeUpdate(); } catch (SQLException e) { System.err.println("Erro de banco de dados: " + e.getMessage()); } finally { closeResources(conn, stmt); } } }

Próximos Passos

Recursos Adicionais

26 June 2025