Você está na página 1de 23

POO

Exceções e controle de erros


O que é
 Quando se cria um programa existem 3 tipos de
erro que podem ocorrer:
 Erros de Sintaxe – Identificados pelo
compilador/interpretador
 Erros de logica – que são tratados pelo processo de
teste
 Erros de tempo de execução – que ocorrem por
diversos fatores e podem levar a falhas criticas
O que é
 Os erros em tempo de execução pode ter diversas
origens e causas, e por muitas vezes a logica do
algoritmo nao podem lidar com elas, Podemos citar:
 Tentar abrir um arquivo que não existe.
 Tentar fazer consulta a um banco de dados que não está
disponível.
 Tentar escrever algo em um arquivo sobre o qual não se
tem permissão de escrita.
 Tentar conectar em servidor inexistente.
O que é
 Estes erros imprevistos durante a execução, são
conhecidos como exceções
 Alguns possíveis erros de lógica para ocorrer uma
exceção são:
 Tentar manipular um objeto que está com o valor nulo.
 Dividir um número por zero.
 Tentar manipular um tipo de dado como se fosse outro.
 Tentar utilizar um método ou classe não existentes.
Tratando Exceções
 Pode permitir que o programa continue executando
como se nenhum problema tivesse sido encontrado
 Pode impedir um programa de continuar executando
normalmente em vez de requer que o problema seja
informado
 É necessário que os programadores escrevam
programas robustos e tolerantes a falhas
Tratando Exceções
 Vantagens
 Úteis para informar ao usuário erros causados por
informação de dados errados ou inválidos
 Mascaramento de erros técnicos complexos ao usuário
 Tomada de ações independentes da ação ou
intervenção do usuário
 Separação e organização do fluxo do programa
try catch
 Uma maneira de tentar contornar esses imprevistos é
realizar o tratamento dos locais no código que podem
vir a lançar possíveis exceções, como por exemplo,
campo de consulta a banco de dados, locais em que
há divisões, consulta a arquivos de propriedades ou
arquivos dentro do próprio computador.

 Para tratar as exceções em Java são utilizados os


comandos try e catch.
try catch
try
{
//linhas de comando que podem lançar uma exceção
}
catch(tipo_exceçao_1 e)
{
//ação a ser tomada
}
catch(tipo_exceçao_n e)
{
//ação a ser tomada
}
try catch
 try{ … } - Neste bloco são introduzidas todas as
linhas de código que podem vir a lançar uma
exceção.
 catch(tipo_excessao e) { … } - Neste bloco é
descrita a ação que ocorrerá quando a exceção for
capturada.
try catch
public float dividir(float a, float b)
{
float r = 0;
try
{
r = a/b;
}
catch(Exception err){
System.out.println(“Divisão por Zero!”);
}
return r;
}
try catch
public String concatenar(String t1, String t2)
{
string r = “”;
try
{
r = t1 + “ “+ t2;
}
catch(NullPointerException e){
r = “Frase vazia !!!”;
}
catch(Exception err){
System.out.println(“Ocorreu um erro”+ err.geMessage());
}
return r;
}
finally
 Comando que é sempre executado, tendo ou não ocorrido
uma exceção durante a execução do código dentro do try
 É utilizado para liberação de recursos, mesmo se algum erro
ocorra
 Quando utilizamos o try/catch, se alguma coisa dá errada no
meio do try, ele o INTERROMPE para entrar no catch, ou
seja, o código dentro do try DEPOIS do erro não será
executado
 Se existe algo importante a ser executado no código, de modo
que, ocorrendo algum erro ou não, isso deva ser feito, pode-
se utilizar o finally
finally
 Exemplos de utilização do comando finally:
 foi aberta uma conexão com o banco de dados para realizar determinada
ação, e no meio deste processo seja lançada alguma exceção, como por
exemplo, NullPointerException ao tentar manipular um determinado
atributo de um objeto.
 Neste caso seria necessário que mesmo sendo lançada uma exceção no meio do
processo a conexão fosse fechada.
 Um outro exemplo bom seria a abertura de determinado arquivo para escrita
no mesmo, e no meio deste processo é lançada uma exceção por algum
motivo, o arquivo não seria fechado, o que resultaria em deixar o arquivo
aberto.
 Quando uma exceção é lançada e é necessário que determinada ação
seja tomada mesmo após a sua captura, utilizamos a palavra reservada
finally.
finally
try
{
//linhas de comando que podem lançar uma exceção
}
catch(tipo_exceçao_1 e)
{
//ação a ser tomada
}
finally
{
//ação a ser tomada
}
finally
public String concatenar(String t1, String t2)
{
string r = “”;
try
{
r = t1 + “ “+ t2;
}
catch(Exception e){
r = “Frase vazia !!!”;
}
finally{
return r.toUpperCase();
}
}
throw e throws
 Imagine uma situação em que não é desejado que
uma exceção seja tratada na própria classe ou
método, mas sim em outro que venha lhe chamar.
Para solucionar tal situação utilizamos o comando
throws na assinatura do método com a possível
exceção que o mesmo poderá a vir lançar.
throw e throws
 Ato de “lançar uma exceção” para o método chamador
 Permite que o programa force a detecção de uma exceção em
determinada situação
 Pode ou não exigir o tratamento do chamador – Mas transfere o
controle do fluxo para eles
 Também é uma cláusula para dizer qual exceção um determinado
método irá provocar caso algum erro específico ocorra
 Útil para se obter uma maneira padronizada de tratar erros
causados pelo usuário, e não pelo sistema
 Exemplos: digitação de CPF inválido, data inválida, campos
obrigatórios não informados em um sistema
throw e throws
tipo_retorno nome_metodo() throws
tipo_exceção_1, tipo_exceção_2,
tipo_exceção_n
{

}
throw e throws
public class TesteString { public static void main(String
//lançando excessão args[])
{
private static void
aumentarLetras() throws try
NullPointerException {
{ aumentarLetras();
String frase = null; }
catch(NullPointerException e)
String novaFrase = null;
{
novaFrase =
System.out.println("Ocorreu
frase.toUpperCase();
um
System.out.println("Frase
NullPointerException ao
antiga: "+frase); executar o método
System.out.println("Frase aumentarLetras() "+e);
nova: "+novaFrase); }
} }
}
throw e throws
 Agora imagine o caso em que seja necessário
lançar uma exceção padrão ao invés de uma
especifica. Para resolver este problema, utilizamos
o comando throw dentro do bloco catch que
desejamos converter a exceção.
throw e throws
public class Agenda {
public void mostraDetalhes(String cpf)
throws NullPointerException
{
if(cpf==null){
throw new NullPointerException(“Cpf invalido”);
} else {
System.out.println(“Cpf ok!”);
}
}
throw e throws
 Essa exceção poderia então ser tratada de acordo
com os formatos de tela do sistema, colocando
assim o sistema funcionando sobre um padrão de
mensagens de erro
Overview
 A robustez de um programa esta estritamente ligada
como seus erros são tratados, em poo isto e mais
importante pois a reutilização do codigo e praxe.
 Ao expor uma classe em novos sistemas e
consequentemente a novas situações estes controles
de execeções são vitais.

Você também pode gostar