Cláusulas try/catch/finally
Declaração de try
com recurso
Classes que implementem
AutoCloseable
podem ser instanciadas utilizando:try (BufferedReader in = new BufferedReader(new FileReader("some.txt")); BufferedWriter out = new BufferedWriter(new FileWriter("other.txt"))) { String text = in.readLine(); out.writeLine(text); } catch (Exception e) { /*handle exceptions*/ }
- Podem produzir exceções suprimidas. Essas são exceções que ocorrem no bloco
finally
implicitamente formado pelotry
com recurso. Elas podem ser recuperadas através do métodogetSuppressed()
.
Múltiplas declarações catch
- As exceções devem ser ordenadas de uma menos específica para uma mais específica.
- Um mesmo bloco
catch
pode capturar mais de um tipo de exceção.
Exceções customizadas
Criação
- Podem ser checadas ou não-checadas. Sendo que as checadas devem estender a classe
Exception
ou alguma de suas descendentes e, exceções não-checadas devem estenderRuntimeExepction
ou alguma de suas subclasses.
- Outro tipo de "exceção" provêm da classe
Error
. Essa classe e suas descendentes se comportam da mesma forma que exceções não-checadas. Porém, elas representam erros não relacionados com a aplicação, comoAssertionError
,VirtualMachineError
,OutOfMemoryError
.
- Exceções checadas normalmente são utilizadas para problemas comuns à execução da aplicação. Em oposição as não-checadas que costumam representar um bug e precisam ser corrigidas ao invés de capturadas.
Utilização
- Uma exceção checada precisa ser capturada ou explicitamente propagada.
- É possível capturar o erro original utilizando o método
getCause()
.