Estruturas excepcionais
Last updated
Last updated
Ao executar o código Java, diferentes erros podem acontecer: erros de codificação feitos pelo programador, erros devido a entrada errada ou outros imprevistos.
Quando ocorre um erro, o Java normalmente para e gera uma mensagem de erro. O termo técnico para isso é: Java lançará uma exceção (jogará um erro).
De forma interpretativa em Java, um erro é algo irreparável, a aplicação trava ou é encerrada drasticamente. Já exceções é um fluxo inesperado da nossa aplicação, exemplo: Querer dividir um valor por zero, querer abrir um arquivo que não existe, abrir uma conexão de banco com usuário ou senha inválida. Todos estes cenários e os demais não são erros mas sim fluxos não previstos pela aplicação.
É ai que entra mais uma responsabilidade do desenvolvedor, prever situações iguais a estas e realizar o que denominamos de Tratamento de Exceções.
Vamos trazer o cenário que estudamos na aula sobre onde via terminal informamos alguns dados pessoais.
Aparentemente é um programa simples, mas vamos listar algumas possíveis exceções que podem acontencer.
Não informar o nome e sobrenome
O valor da idade ter um caractere NÃO numérico
O valor da altura ter uma vírgula ao invês de ser um ponto (conforme padrão americano)
Executando o nosso programa com os valores abaixo, vamos entender qual exceção acontecerá:
Digite seu nome:
Marcelo
Digite seu sobrenome:
Azevedo
Digite sua idade:
quinze (15)
java.util.InputMismatchException
O programa esperava o valor do tipo numérico inteiro.
Digite sua altura:
1,65
java.util.InputMismatchException
O programa esperava o valor do tipo numérico decimal no formata americano, exemplo: 1.65
A linguagem Java dispõe de uma vasta lista de classes que representam exceções, abaixo iremos apresentar as mais comuns:
java.lang.NullPointerException
Quando tentamos obter alguma informação de uma variável nula.
java.lang.ArithmeticException
Quando tentamos dividir um valor por zero.
java.sql.SQLException
Quando existe algum erro relacionado a interação com banco de dados.
java.io.FileNotFoundException
Quando tentamos ler ou escrever em um arquivo que não existe.
E quando inevitavelmente ocorrer uma exceção? Como nós desenvolvedores podemos ajustar o nosso algoritmo para amenizar o ocorrido?
A instrução try
permite que você defina um bloco de código para ser testado quanto a erros enquanto está sendo executado.
A instrução catch
permite definir um bloco de código a ser executado, caso ocorra um erro no bloco try.
A instrução finally
permite definir um bloco de código a ser executado independente de ocorrer um erro ou não. As palavras-chave try
e catch
vêm em pares:
Estrutura de um bloco com try e catch
O bloco try
/ catch
pode conter um conjunto de catchs correspondentes a cada exceção que prevista em uma funcionalidade do programa.
A linguagem Java dispõe de uma variedade de classes que representam exceções, e estas classes são organizadas em uma hierarquia denominadas Checked and Unchecked Exceptions ou Exceções Checadas e Não Checadas.
Vamos imaginar que precisamos realizar de duas maneiras a conversão de uma String para um número, porém o texto contém Alfanuméricos.
Nós podemos criar nossas próprias exceções baseadas em regras de negócio e assim melhor direcionar quem for utilizar os recursos desenvolvidos no projeto, exemplo:
Imagina que como regra de negócio, para formatar um cep necessita sempre de ter 8 dígitos, caso contrário lançará uma exceção que denominamos de CepInvalidoException.
Primeiro criamos nossa exceção:
Em seguida criamos nosso método de formatação de cep.