Algumas linguagens de programação,
inclusive a linguagem Java, trazem mecanismos de controle e manipulação de falhas.
Elas permitem que o desenvolvedor crie códigos simples para lançar e tratar falhas
geradas em tempo de execução. Esses problemas podem ser, por exemplo, problemas
de hardware, recursos (arquivos, banco de dados) que não puderam ser
manipulados ou apresentaram algum problema durante o processo de utilização ou,
como também, antigos bugs conhecidos
por programadores do mundo todo. Pensando nisso, este artigo será responsável
por descrever e explicar todo o funcionamento dessa ferramenta tão poderosa
para controle de falhas na linguagem Java.
O
que é uma Exceção?
Exceções são problemas que ocorrem e
provocam a interrupção do fluxo normal do programa. Situações adversas e
diferentes do que o programa está esperando como resultado. Para tratar essas
situações, temos os manipuladores de exceções. A ideia é passar o fluxo de
controle, uma vez interrompido por uma exceção, para um código que será
responsável por manipular e procurar uma alternativa a um código que não pode
ser executado por completo. Por exemplo, um método para ser executado precisa
abrir um arquivo em disco e ler algumas informações. Por algum motivo, o método
não conseguiu abrir esse arquivo e não pode ser executado, assim o programa
para a execução, mas temos que ter uma saída e a saída é um manipulador de
exceção.
Problemática
Antes de mostrar o uso e
aplicabilidade de exceções, vamos exemplificar com um problema simples que
ocorre sistematicamente no desenvolvimento de software. Chamamos aqui de
Problema do Saldo Negativo. O problema consiste em não deixar com que um débito
em conta-corrente seja maior que o valor do saldo atual da conta. Caso o débito
seja realizado, o correntista ficará com o saldo negativo, mas ele não tem
cheque especial e com isso o sistema deve ser alertado de alguma forma. Na Listagem 1 pode ser visto um código que
possui o problema.
Listagem 1. Classe Conta e
método debitar().
public class Conta {
private String numero;
private double saldo;
...
public void debitar(double valor) {
saldo = saldo - valor;
}
}
O método debitar() faz o débito do valor passado
como parâmetro na variável saldo,
mas não faz nenhum tipo de alerta ou filtragem, isto é, o débito sempre ocorre.
Essa situação seria a primeira solução para o débito em conta corrente, sem
nenhum tipo verificação de valores. Vejamos agora, na Listagem 2, uma possível solução onde é utilizada uma condição.
Listagem 2. Solução 1 para o
método debitar().
public
class Conta {
private String numero;
private double saldo;
...
Exibição do post interrompida. Para ler conteúdo completo,
clique aqui