Anda di halaman 1dari 51

Especializao em desenvolvimento

para web com interfaces ricas

Tratamento de excees em Java


Prof. Fabrzzio A. A. M. N. Soares
Objetivos
Conceito de excees
Tratar excees pelo uso de try, catch e finally;
Diferenciar entre o uso de throw e throws;
Utilizar as classes de excees existentes;
Diferenciar entre excees verificadas e no
verificadas;
Definir suas prprias classes de exceo;
Excees
O tratamento de exceo o mecanismo
responsvel pelo tratamento da ocorrncia de
condies que alteram o fluxo normal da
execuo de programas de computadores.
Excees
Em geral, na ocorrncia de uma exceo, o
estado do programa gravado em um local pr-
definido e a sua execuo direcionada para
uma rotina de tratamento.
Excees
Dependendo da situao, a rotina de tratamento
pode prosseguir a execuo a partir do ponto
que originou a exceo, utilizando a
informao gravada para restaurar o estado.
Excees
Um exemplo de exceo que normalmente
permite o prosseguimento da execuo aquela
originada por uma operao aritmtica.
Excees
Para o desenvolvedor de uma rotina, lanar
uma exceo um modo til de assinalar que a
rotina no deve continuar a execuo.
Excees
Exemplos:
argumentos de entrada no so vlidos (um
denominador igual a zero em uma diviso,
por exemplo)
um recurso no qual o programa depende no
est disponvel (um arquivo no encontrado
ou um erro em um disco, por exemplo).
O que so excees?
Eventos excepcionais;
Erros que ocorrem durante a execuo do
programa;
Causam distrbios no fluxo normal do
programa;
Exemplo 1
packageexemploexcecao1;
importjava.util.Scanner;
publicclassExemploExcecao1{
publicstaticvoidmain(String[]args){
Scannersc=newScanner(System.in);

System.out.println("Digiteseunome:");
Stringnome=sc.next();
System.out.println("Digitesuaidade:");
intidade=sc.nextInt();
}
}
Tratamento de Excees
Sempre que um mtodo de alguma classe
passvel de causar algum erro, ento, podemos
usar o mtodo de tentativa - o try.
Tudo que estiver dentro do bloco try ser
executado at que alguma exceo seja lanada,
ou seja, at que algo d errado.
Tratamento de Excees
Quando uma exceo lanada, ela sempre
deve ser capturada.
O trabalho de captura da exceo executado
pelo bloco catch.
Um bloco try pode possuir vrios blocos de
catch, dependendo do nmero de excees que
podem ser lanadas por uma classe ou mtodo.
Capturando excees:
Instrues try-catch
Sintaxe:
try{
<cdigoasermonitoradoparaexcees>
}catch(<ClasseExceo><nomeObj>){
<tratarseClasseExceo1ocorrer>
}
Tratando o exemplo 1 (verso 1)
packageexemploexcecao1;
importjava.util.Scanner;
publicclassExemploExcecao1{
publicstaticvoidmain(String[]args){
Scannersc=newScanner(System.in);
System.out.println("Digiteseunome:");
Stringnome=sc.next();
System.out.println("Digitesuaidade:");
try{
intidade=sc.nextInt();
}catch(Exceptione){
System.out.println(Vocinformouaidadeerrada!);
}
}
}
Tratando o exemplo 1 (verso 2)
...
booleanerro;
do{
try{
System.out.println("Digitesuaidade:");
intidade=sc.nextInt();
erro=false;
}catch(Exceptione){
System.out.println("Vocinformouaidade
errada!");
erro=true;
sc.nextLine();
}
}while(erro);
...
Palavra-chave finally
Finally o trecho de cdigo final. A funo
bsica de finally sempre executar seu bloco
de dados mesmo que uma exceo seja lanada.
muito til para liberar recursos do sistema
quando utilizamos, por exemplo, conexes de
banco de dados e abertura de buffer para leitura
ou escrita de arquivos.
Finally vir aps os blocos de catch.
Capturando excees:
Palavra-chave finally
Sintaxe:
try{
<cdigoasermonitoradoparaexcees>
}catch(<ClasseExceo1><nomeObj>){
<tratarseClasseExceo1ocorrer>
}...
}finally{
<cdigoaserexecutadoantesdoblocotryser
finalizado>
}
Exemplo de finally
try{
objQualquer.WriteLine("Escrevendoalgo...");
}catch(Exeptione){
System.out.println("Erroaodigitar...");
}finally{
objQualquer.Close();
}
Capturando excees:
Palavra-chave finally
Bloco de cdigo executado em um desses
quatro cenrios:
1.Execuo normal sem excees;
2.Um bloco catch captura e trata uma exceo
lanada;
3.Exceo lanada no capturada por nenhum
bloco catch;
4.Sada forada usando instrues return,
continue ou break.
Situaes 1 e 2
Execuo normal sem excees;
Um bloco catch captura e trata uma exceo lanada;
Scannersc=newScanner(System.in);
try{
System.out.println("Digitesuaidade:");
intidade=sc.nextInt();
}catch(Exceptione){
System.out.println("Vocinformouaidadeerrada!");
}finally{
System.out.println("Executei!");
}
Situao 3
Exceo lanada no capturada por nenhum bloco catch;
Scannersc=newScanner(System.in);
try{
System.out.println("Digitesuaidade:");
intidade=sc.nextInt();
}catch(ArithmeticExceptione){
System.out.println("Vocinformouaidadeerrada!");
}finally{
System.out.println("Executei!");
}
Situao 3
Desta forma, ento possvel ter um bloco de try / finally
sem o catch:
Scannersc=newScanner(System.in);
try{
System.out.println("Digitesuaidade:");
intidade=sc.nextInt();
}finally{
System.out.println("Executei!");
}
Situao 4
Sada forada usando instrues return, continue ou break;
Scannersc=newScanner(System.in);
try{
System.out.println("Digitesuaidade:");
intidade=sc.nextInt();
return;
}catch(ArithmeticExceptione){
System.out.println("Vocinformouaidadeerrada!");
}finally{
System.out.println("Executei!");
}
Hierarquia
Classe Throwable
Classe de origem de todas as classes de exceo
Sub-classe Error
Sub-classe Exception
Classe Error
Usada pela JVM para manipular erros ocorridos
no ambiente de execuo
Geralmente, esses erros encontram-se alm do
controle dos programas
Exemplos:
Erro de falta de memria
Erro de acesso ao disco rgido
Classe Exception
Circunstncias que os usurios podem tratar
Resultam de falhas no cdigo do programa
Exemplos:
Erro em uma diviso por zero
Erro ao tentar acessar um ndice inexistente um
array
Excees
As excees so, na verdade, instncias de
classes.
E como qualquer classe ou objeto, podemos
facilmente manipular.
Excees
Existem mtodos comuns entre todas as classes
de Excees, dentre as quais podemos citar:
toString(): Converte os dados da exceo para
String para visualizao.
printStackTrace(): Imprime na sada de erro
padro (geralmente console) todos os frames
de onde foram detectados erros.
til para depurao no desenvolvimento, pois
mostra todo o histrico do erro, alm das
linhas onde foram ocasionados.
Excees
getCause(): Retorna a causa da Exceo, ou
null se a causa for desconhecida ou no
existir.
getMessage(): Retorna uma string com o erro.
uma forma simples e elegante de mostrar a
exceo causada, geralmente, utilizada como
forma de apresentao ao usurio.
Hierarquia das classes de Excees
Throwable Error LinkageError, ...
VirtualMachineError, ...
Exception ClassNotFoundException
CloneNotSupportedException
IlegalAccessExcption
InstatiationException
InterruptedException
IOException EOFException
FileNotFoundException
RuntimeException ArithmeticException
ArrayStoreException
ClassCastException
...
Ordem de captura
Exemplo que no compila
try{

}catch(Exceptione){

}catch(ArithmeticExceptione){

}
Ordem de captura
Exemplo que compila
try{

}catch(ArithmeticExceptione){

}catch(Exceptione){

}
Lanando de excees:
Palavra - chave throws
necessrio um mtodo para cada catch ou lista de
excees que podem ser lanadas
Exceto para as Classes Error, RuntimeException e suas
sub-classes
Se um mtodo causar uma exceo mas no captur-la,
ento deve-se utilizar a palavra-chave throws
Sintaxe:
<tipo><nomeDoMtodo>(<argumento>*)throws<listaDeExceo>
{
<CorpodoMtodo>
}
Exemplo 1
publicstaticvoidfuncao1(){
try{
funcao2();
}catch(Exceptione){
...
}
}
publicstaticvoidfuncao2()throwsException{
...
}
Exemplo 2
publicstaticvoidmain(String[]args){
try{
funcao1();
}catch(Exceptione){
...
}
}
publicstaticvoidfuncao1()throwsException{
funcao2();
}
publicstaticvoidfuncao2()throwsException{
...
}
Exemplo 3
publicstaticvoidmain(String[]args)
throwsExeption{

funcao1();

}
publicstaticvoidfuncao1()throwsException{
funcao2();
}
publicstaticvoidfuncao2()throwsException{
...
}
Lanando de excees:
Palavra-chave throw
Java nos permite lanar excees:
throw <objetoExceo>;
Exemplo:
throw new ArithmeticException("testing...");
Exemplo 1
publicstaticvoidfuncao1(){
try{
funcao2();
}catch(Exceptione){
...
}
}
publicstaticvoidfuncao2()throwsException{
thrownewException("Deuerro!");
}
Tipos de Excees
Os projetistas da linguagem Java
desenvolveram um conjunto especial de
excees:
Excees no-verificadas
Excees verificadas
Excees verificadas
As excees verificadas (checked exceptions)
so aquelas que se um mtodo pode lan-la,
ela deve constar em seu cabealho.
Todas as excees que derivam de Exception
de forma direta ou indireta, so excees
verificadas.
Excees no-verificadas
As excees nao-verificadas so aquelas que
quando um mtodo pode lana-la, no
necessita-se mostrar em seu cabealho;
Caso o lanamento conste no cabealho, esta
exceo no precisa obrigatria ser capturada
com try/catch.
Todas as excees derivadas de
RuntimeException so no verificadas.
Exemplo 1
publicstaticvoidfuncao1(){

funcao2();

publicstaticvoidfuncao2(){

thrownewRuntimeException("Deuerro!");

}
Exemplo 2
publicstaticvoidfuncao1(){

funcao2();

}
publicstaticvoidfuncao2()
throwsRuntimeException{

thrownewRuntimeException("Deuerro!");

}
Exemplo 3
publicstaticvoidfuncao1(){
try{
funcao2();
}catch(RuntimeExceptione){
...
}
}
publicstaticvoidfuncao2(){
thrownewRuntimeException("Deuerro!");
}
Exemplo 4
publicstaticvoidmain(String[]args)
throwsException{

funcao1();
}
publicstaticvoidfuncao1()throwException{
funcao2();
}
publicstaticvoidfuncao2(){
thrownewRuntimeException("Deuerro!");
}
Vantagens e desvantagens
Excees verificadas
Vantagem: fazem do cdigo mais seguro j que
no permitido ignorar excees conhecidas e
d oportunidade de recuperar de problemas;
Desvantagem: obriga a inserir try/catch ao longo
do cdigo
Excees no-verificadas
Vantagem: torna a escrita do cdigo mais fcil de
escrita e leitura;
Desvantagem: ao acontecer uma exceo o
programa imediatamente finalizado.
Criao de classes de Excees
Assim como qualquer objeto, em java tambm
possvel criar suas prprias excees.
Criao de classes de Excees
Imagine um cenrio que nenhuma exceo
existente faa sentido para ser lanada por
voc.
Por exemplo imagine que por algum motivo
voc precisa que uma exceo seja lanada
quando a letra A ou a no existe em
determinada frase, como no existe nenhuma
exceo especfica para este caso ser
necessrio criar uma exceo.
Exemplos de uso
publicclassSemLetraAExceptionextendsException{
publicStringtoString(){
return"NoexisteletraAemsuafrase";
}
}
publicclassExemploExcecao{
publicvoidimprima(Stringfrase)
throwsSemLetraAException{

if(!frase.contains("a")||!frase.contains("A"))
thrownewSemLetraAException();
}
System.out.println(frase);
}
}
Exemplo de uso
publicclassExemplo{
publicstaticvoidmain(Stringargs){
ExemploExcecaoobj=newExemploExcecao();
try{
obj.imprima(Temerro!);
}catch(SemLetraAExceptione){
System.out.println(e);
}
}
}

Anda mungkin juga menyukai