Olá desenvolvedores, falaremos hoje um pouco mais sobre exceções lançadas para cima. No tutorial anterior implementamos uma classe de exceções customizadas. E neste cenário apareceu pela primeira vez a expressão “lançar exceção para cima”.

Com o método lerArquivo() implementado se uma exceção for lançada dentro do try, um desvio será promovido para o catch. Neste ponto lançamos a exceção com um throw new e o nome da exceção que desejamos lançar – ExcecaoProcessarNota. Mas poderíamos no caso passar a própria exceção FileNotFoundException.

O que provocaria uma reação em cadeia, visto que será necessário alterar a exceção também na assinatura do método, ficando assim “throws FileNotFoundException”. E subindo nesta hierarquia teríamos que efetuar a mudança no método pai, onde a implementamos no bloco catch. Agora o método lerArquivo() lança um FileNotFoundException.

Já falamos aqui um pouco sobre o throw. Mas a principal diferença entre throw e throws, é, grosso modo que o primeiro tem o papel de lançar uma exceção no corpo do método, podendo ser utilizado também para lançar uma exceção genérica. Ao passo que o segundo é utilizado na declaração do método para retornar para o pai. Visto que especifica qual exceção não vai tratar.

Como estamos fazendo a declaração de um simples arquivo, temos então a autonomia para lançarmos nossa própria exceção de FileNotFoundException. Neste caso, não há menor necessidade de que todo o código seja escrito dentro dos blocos try/catch. Podemos dividir as responsabilidades, por assim dizer e lançar a exceção para cima.

Para tomar tal decisão devemos levar em conta a arquitetura do código, e assim constatar a real necessidade de fazê-lo ou não. Pessoalmente prefiro trabalhar em um único try/catch, assim sendo, minha escolha será sempre lançar a exceção para o bloco de tratamento de exceções principal. E dessa forma centralizar a captura de exceção.

NOVA IMPLEMENTAÇÃO

Assim, minha implementação do método lerArquivo() contemplaria apenas as duas linhas de código principal. Mas, deixando na assinatura do método o “throws FileNotFoundException”, desse modo qualquer exceção que vier a ocorrer, será lançada para cima.

EM POUCAS PALAVRAS

Na maioria absoluta das vezes o Java sempre trabalha jogando essas exceções para cima, para que as mesmas possam ser capturadas pelo método pai. Então, acostume-se a adotar esta prática.

Ao longo destes tutorias foram mostrados vários casos e vários formas de fazer e tratar erros e exceções. Vários caminhos levando a Roma. Para cada tipo de problema, existe uma solução específica e algumas formas de aplicá-la. Isso significa preocupar-se com o seu código e com a sua equipe. Veja mais sobre este assunto aqui

Entretanto, simplificando a nossa implementação poderíamos deixar apenas uma exceção genérica, envolvendo o for, bem como o bloco finally. Tão somente essas duas exceções seriam suficientes para atender as necessidades do nosso código.

Então é isso, acostumem-se a lidar com as exceções porque a todo momento vocês as estarão implementando em seus projetos. Eu fico por aqui, nos vemos no próximo tutorial.