Olá desenvolvedores, hoje aprenderemos sobre pilha ou funil de exceção, mais conhecida como pilha de exceção ou stack trace (rastreamento de pilha). Entendemos que exceção é um evento não esperado que ocorre no sistema em tempo de execução (Runtime) ou em tempo de compilação. De qualquer forma quando uma exceção é lançada o fluxo do código é interrompido.
Sendo que o erro de compilação é aquele que impede o sistema até mesmo de ser iniciado. Ao passo que o erro em tempo de execução, é aquele que ocorre durante a execução do projeto.
No tutorial passado falamos daquela que é entre tantas exceções a mais comum, o NullPointerException. Esta que faz com que principalmente os programadores menos experientes percam preciosas horas na tentativa de encontrar o erro. Mas se você souber de antemão que esta exceção é lançada por um erro de lógica? Isto é, quando ocorre uma tentativa de acessar um objeto, método ou atributos nulos.
E é exatamente por isso que precisamos conhecer sobre os tipos de exceções e o motivo qual elas ocorrem. Dessa forma poderemos ser mais ávidos na busca pela solução do problema. Ou seja, é de fundamental importância saber ler e interpretar as exceções/erros de forma clara e objetiva. Somente a partir deste entendimento uma rápida solução poderá ser aviada.
No tutorial “ENTENDENDO UMA EXCEÇÃO”, nos debruçamos sobre o NullPointerException afim de entender-lhe a estrutura e aprender como ler uma exceção. Analisamos linha a linha a arquitetura dessa exceção.
Hoje aprenderemos o que é um rastreamento de pilha e como poderemos utilizá-lo para detectar erros.
PILHA DE EXCEÇÕES
Ao analisarmos as informações de uma pilha de exceção certamente nos depararemos com a raiz do problema, e dessa forma poderemos rapidamente corrigir os erros. Elas são classificadas pela exceção do nível mais alto e pela exceção do nível mais baixo, formando assim uma pilha de fato, como a pilha de cartas de um baralho comum.
Na base da pilha está o método causador do erro, classes e métodos invocados. No caso do exemplo do tutorial passado, o método principal – main. Subindo nesta estrutura tem-se o código em si, entre os quais, classes Java e métodos do projeto.
Observe que quanto mais códigos vão sendo executados, significa que estamos adentrando mais e mais na estrutura do projeto. E é por este motivo que o funil se expande, porque estamos cada vez mais dentro do cerne do projeto e isto implica em mais códigos sendo executados.
Obviamente que sempre haverá um motivo para que o fluxo de execução do código seja interrompido. Entre estes motivos podemos ter um valor que não foi retornado, uma conversão que não foi feita, a necessidade de uma biblioteca que não foi importada.
Continuando a subir no funil de exceção, na terceira fase a análise é das classes e linhas de código. E por fim, a descrição real do erro e a solução sendo representados na parte superior do funil. E entenda, pode acontecer que o programa esteja exibindo uma série de erros, mas a causa pode ser apenas uma. Como tudo está interligado, um erro em um trecho do código, certamente irá repercutir em diversos outros pontos do projeto.
EM POUCAS PALAVRAS
Sempre verifique qual é o ponto inicial, o ponto causador do problema. Faça o rastreamento de pilha avaliando as linhas bem como a descrição do erro. E não se desespere, siga estas orientações, comece de baixo para cima e tenha em mente que sempre haverá uma solução direta ou indireta para cada erro.
Adiante você aprenderá a tratar estes erros, e a prevenção dos mesmos deverá ser um processo natural enquanto estiver desenvolvendo um sistema. Com o tempo e experiência, você se pegará perguntando: O que acontecerá se este arquivo não puder ser aberto? Ou ainda, o que acontecerá se não tiver memória suficiente? O que acontecerá se a leitura falhar? Ou se o sistema cair em meio a um processamento importante?
Cada regra de negócio pedirá seus próprios questionamentos, e você deverá ser capaz de tratá-los previamente. Então é isso, o tutorial de hoje teve o objetivo de apresentar as vocês o Stack Trace. O Java possui recursos como o método printStackTrace e a classe Throwable que fornece vários métodos para trabalhar com o rastreamento de pilha.
Eu fico por aqui, nos vemos no próximo tutorial.