0

Tratamento de Exceções em Java

B
Breno Guimarães

Exceções são todos os erros que ocorrem durante o processamento de um método e podem ser esperados ou não esperados. Como o próprio nome já diz "Exceptions" são as possíveis exceções. São falhas que, idealmente, não devem ocorrer no fluxo do sistema.


Em todos os exemplos do artigo usaremos o bloco Try catch, mas o que é e pra que serve essa estrutura?


O bloco try/catch é utilizado sempre quando no processo que será executado dentro de um método é esperado um erro, para isso cria-se um bloco "protegido" onde qualquer erro que ocorra dentro do trecho "try" é direcionado para o trecho "catch" e sofrerá o devido tratamento de erro.


No exemplo abaixo temos um método para a criação de um arquivo dentro de um bloco try/catch que, no caso de não conseguir executar a função java.io.FileInputStream() lança uma exceção do tipo java.io.FileNotFoundException com a mensagem "Não foi possível abrir o aquivo para consulta":


public static void method(String[] args) {
  try {
     new java.io.FileInputStream("arquivo.txt");
  }catch (java.io.FileNotFoundException e) {
     System.out.println("Não foi possível abrir o aquivo para consulta");
  }
}


Tratamento de exceções

Checked Exceptions:


Checked exception ou exceções esperadas são aquelas cujo fluxo ou método de um sistema foi preparado para receber. Um bom exemplo é uma exceção de negócio, ou se deseja informar um erro caso a exceção esperada ocorra.


No exemplo abaixo o meu bloco try/catch está lançando uma exceção customizada que é a AcessoADadosException para o caso da minha query não ser executada com sucesso.

try{
  PreparedStatement stmt = con.prepareStatement(query);
  //...
}catch (SQLException e) {
  throw new AcessoADadosException("Problema na criação do Statement")
}


Unchecked Exceptions:


As unchecked exceptions não são esperadas para o fluxo ou método de um sistema, um bom exemplo é a famosa NullPointException que ocorre quando se tenta acessar uma referencia de memória que está vazia ou recuperar uma instancia que não existe.


No exemplo a baixo, o bloco try/catch cria um objeto carro e acessa o método getPlaca(), mas como não foi atribuÍdo nenhum valor à propriedade placa teremos um NullPointException que é uma unchecked exception.


try{
  Carro carro = new Carro();
  System.out.println(carro.getPlaca());
}catch (IntegrationException e) {
  throw new BusinessException("Erro na criação do objeto carro");
}


Mais sobre o bloco try/catch e seus agregados:

Finally:

O bloco finally é um bloco de codigo que pode ou não ser utilizado junto ao try/catch, este trecho de código semrpe será executado independente se ocorrer erro ou não dentro do fluxo onde existe o try/catch. Normalmente o finally é usado para liberar recursos ou para dar continuidade em um fluxo que deve ocorrer independente de eventuais erros.


Exemplo: 


try{
  PreparedStatement stmt = con.prepareStatement(query);
  //...
}catch (SQLException e) {
  throw new AcessoADadosException("Problema na criação do Statement");
} finally {
 stmt.close();
}


Throws:

É a assinatura do método que será retornado caso ocorra erro para o método que fez a chamada, dentro de um fluxo encadeado.


Throw: 

É usado para lançar a execução desejada, juntamente com a mensagem de erro, para o método que fez a chamada.


Exemplo:


public String recuperaIdUsuaruio(String query) throws AcessoADadosException {
try{
  PreparedStatement stmt = con.prepareStatement(query);
  //...
}catch (SQLException e) {
  throw new AcessoADadosException("Problema na criação do Statement");
} finally {
 stmt.close();
}
}


0
0

Comentários (0)

Desenvolvedor Backend

Brasil