Capturando qualquer tipo de exceção, olá desenvolvedores chegou a hora de aprender colocando a mão na massa a tratar exceções. Já vimos a teoria sobre estes erros. Vimos o que é uma exceção e passamos pelos fatores internos e externos que motivam a ocorrência de uma exceção.

E então aprendemos sobre a arquitetura de uma exceção, pilhas e sobre as exceções/erros mais comuns entre os iniciantes. E iniciamos uma conversa sobre o tratamento das exceções de fato, onde falamos sobre os blocos try(tentar)/catch(capturar). Nosso objetivo hoje é implementá-los e ver na prática como tudo isso funciona.

Iremos implementar na classe principal main, dessa forma o código que pode vir a gerar uma exceção deverá ser colocado dentro do bloco try. E este bloco try deverá ser seguido por um ou mais blocos catch. Isso porque se alguma exceção ocorrer durante a execução de alguma instrução contida no bloco try, um desvio será promovido.

Dessa forma as instruções que estiverem dentro do bloco cacth e que consideram exceções do mesmo tipo serão então executadas. No caso em que uma exceção é lançada, as instruções contidas no bloco try serão imediatamente interrompidas.

SIMULANDO UM ERRO

Para que possamos simular um erro em nosso código, inicializaremos a lista de alunos com o valor null.

List<Aluno> alunos = null;

Feito isso executaremos normalmente o programa para vermos que tipo de exceção será lançada. Muito embora, depois de tanto falar sobre o tema, você já deve imaginar qual será?

E como era de se esperar um NullPointerException foi gerado, visto que deixamos nossa lista com um valor “null”. Analisando o erro, sempre de baixo para cima, temos que o erro correu na PrimeiraCalsseJava, no método main. E analisando os pacotes, embora neste caso seja óbvio, mas ao analisa-los poderemos ver que há uma classe do Java e sim uma classe criada por mim.

Note ainda que se clicarmos sobre o que está em destaque de azul, seremos redirecionados para a linha 75, onde a exceção ocorre.

Se posicionarmos o ponteiro do mouse sobre a lâmpada, uma mensagem informando exatamente o que está acontecendo será exibida:

A mensagem acima informa que estamos tentando acessar um ponteiro nulo. E informa que a variável “aluno” pode estar nula. Veja, ao fazermos todas essas análises, já temos uma boa ideia de onde procurar o erro, isto é, o objeto nulo. Mas é ainda mais simples.

Pressione a tecla CTRL e clique sobre a variável “aluno”. Você será levado exatamente para o local onde o objeto nulo se encontra. Mas não se alegre, não será assim sempre tão fácil, visto que aqui simulamos o erro. Algo que normalmente acontece é a existência de um objeto nulo dentro de um objeto instanciado. Entretanto, a solução será sempre a mesma, basta atribuir um valor a ele.

IMPLEMENTANDO O TRY/CATCH

Você pôde observar que tão logo encontrou a exceção a execução do nosso programa foi simplesmente abortada. Nenhuma mensagem foi exibida para o usuário, ele simplesmente ficou sem saber o que aconteceu ou o que fez de errado. É este tipo de problema que a dubla try/cacth irá resolver.

Assim, dessa forma envolva todo o bloco principal dentro de um bloco try. É nele que estão as instruções que podem gerar um erro, lançando então uma exceção.

Dentro do bloco catch adicionaremos uma instrução que imprimirá uma mensagem no console. Para isso utilizaremos o método printStackTrace que exibirá os erros no console. E para imprimirmos uma mensagem para o usuário, recorreremos ao ShowMessageDialog.

Após a implementação, execute o programa novamente, tão logo se depare com a exceção, a execução do que está dentro do try será interrompida. E assim a instrução do bloco catch será executada.

Este tipo de mensagem para o usuário cumprem o papel de orientá-lo quanto ao tipo de erro. E para os programadores a mensagem contendo o tipo de erro será exibida no console. Mensagem esta gerada pelo printStackTrace().

O printStackTrace é de extrema importância para que você possa saber que tipo de erro ocorreu. Sem ele, nada será impresso no console. E sempre faça nesta ordem, primeiro imprime no console e depois exiba alguma mensagem para o usuário.

EM POUCAS PALAVRAS

Então depois de tanto falarmos sobre os tipos de erros e exceções, começamos hoje a aprender como tratá-los. Aprendemos como funciona na prática a implementação dos blocos try/catch.

Reforçando que try é o bloco de código capaz de identificar onde as exceções podem ocorrer. E catch é o bloco de código que pode lidar com um tipo de exceção particular. Nota: no Java sempre poderemos tratar todas as exceções capturando as do tipo Throwable.

Espero que tenham gostado, nos vemos no próximo tutorial.