DEV Community

Usando finally e throws

  • Podemos querer definir um bloco de código para ser executado ao sair de um bloco try/catch.

  • Exceções podem causar erros que encerram métodos prematuramente, deixando recursos como conexões ou arquivos abertos.

  • O bloco finally é usado para garantir que ações como o fechamento de recursos sejam realizadas, independentemente de ocorrer uma exceção.

  • O bloco finally é incluído ao final de uma sequência try/catch.

try {
// bloco de código cujos erros estão sendo monitorados
}
catch (TipoExceç1 obEx) {
// tratador de TipoExceç1
}
catch (TipoExceç2 obEx) {
// tratador de TipoExceç2
}
//...
finally {
// código de finally
}

  • O bloco finally é sempre executado ao sair de um bloco try/catch, independentemente da causa.

  • Seja o bloco try finalizado normalmente ou devido a uma exceção, o código em finally será o último a ser executado.

  • O bloco finally também é executado se o código no bloco try ou catch retornar do método.

Image description

Image description

Usando throws

  • Quando um método gera uma exceção que não trata, ele deve declará-la em uma cláusula throws.

tipo-ret nomeMét(lista-parâm) throws throws lista-exceç {
// corpo
}

  • lista-exceç é uma lista separada por vírgulas com as exceções que o método pode lançar para fora dele.

  • Exceções que são subclasses de Error e RuntimeException não precisam ser especificadas na cláusula throws; o Java as assume automaticamente.

  • Outras exceções precisam ser declaradas na cláusula throws, caso contrário, causam erro de compilação.

  • Exemplo anterior: ao usar entradas do teclado, a cláusula throws java.io.IOException foi adicionada ao método main() para tratar a exceção de I/O.

  • O método prompt() pode gerar uma IOException ao ler do teclado, mas não a trata internamente, usando throws para delegar o tratamento para o método chamador.

Image description

  • IOException é totalmente qualificada com o nome do seu pacote, java.io.

  • O sistema de I/O do Java está no pacote java.io, onde IOException é definida.

  • Também seria possível importar java.io e referenciar IOException diretamente.

Top comments (0)