Você está na página 1de 19

Programao Orientada a Objeto Turma N03 Fabio Rocha

Alunos: Wilton Leite de Santana

JavaLunch - Excees

Roteiro
O que so excees e porqu trat-las Excees em Java Palavras chave no tratamento de excees
throws throw try, catch e finally

Definindo suas prprias excees

Tratamento de Excees
Excees so eventos que ocorrem durante a execuo de um programa e quebram o fluxo normal de execuo das instrues Indicam a ocorrncia de erros ou condies excepcionais

No Tratando Excees...
Erro em em tempo tempo de de execuo! execuo! Erro

class Divide { public static void main (String args[]) { int dividendo, divisor; dividendo = Integer.parseInt(args[0]); divisor = Integer.parseInt(args[1]); metodoA (dividendo, divisor); }
ArithmeticException

public static void metodoA (int dividendo, divisor) { metodoB (dividendo, divisor); return; }
ArithmeticException

public static void metodoB (int dividendo, divisor) { System.out.println (Resultado: + dividendo/divisor); return; } }
ArithmeticException levantada!

Tratamento de Excees: Simplicidade e Homogeneidade


entrada de dados invlida; falhas no tratamento de arquivos; falhas na comunicao entre processos; reativao de threads; erros aritmticos; estouro de limites de arrays; etc.

Tratamento de Excees:

Legibilidade de Cdigo
Sem tratar excees ...
erro = 0; oper1; if (!erro1) { oper 2; if (!erro2) { ... } else erro = -2; } else erro = -1; if (erro < 0) { tratarErro(erro); ...

Tratando excees
... try { oper1; oper2; } catch(erro1) { // tratar erro1 } catch(erro2) { // tratar erro2 } ...

Tratamento de Excees
Em Java, excees so objetos Classes envolvidas:
Throwable

Error

Exception

Palavras Chave no Tratamento de Excees


throws
Declara que um mtodo pode levantar exceo

throw
Levanta uma exceo

try, catch e finally


Definem bloco de tratamento de exceo

Usando Throws
class Count { public static void main (String args[]) throws java.io.IOException { int count = 0; while (System.in.read() != -1) count ++; System.out.println(Caracteres: +count); } } > javac Count.java Count.java:4: Exception java.io.IOException must be caught, or it must be declared in the throws clause of this method. while (System.in.read() != -1) ^ 1 error

Throws
O compilador no exige que se declare excees de qualquer subclasse de Error ou de RuntimeException As excees declaradas com throws podem ser superclasses das excees que so realmente levantadas UmaExcecao
SubExcecao1 SubExcecao2

public void umMetodo throws SubExcecao1, SubExcecao2 { ... }

public void umMetodo throws UmaExcecao { ... }

Throw
Usada para levantar excees
... // Criacao do objeto exception Exception e = new Exception(Problemas!); ... //Levantando a excecao throw e; throw new Exception(Problemas!);

Try, Catch e Finally

try { ... } catch (umaExcecao e1) { ... } catch (outraExcecao e2) { ... } catch (maisUmaExcecao e3) { ... } finally { ... }

Capturando Excees
class Divide { public static void main (String args[]) { int dividendo, divisor; dividendo = Integer.parseInt(args[0]); divisor = Integer.parseInt(args[1]); try { metodoA (dividendo, divisor); } catch (ArithmeticException e) { System.out.println (Divisor Invalido!); }
Excecao capturada!

public static void metodoA (int dividendo, divisor) { metodoB (dividendo, divisor); return; }
ArithmeticEception

public static void metodoB (int dividendo, divisor) { System.out.println (Resultado: + dividendo/divisor); return; }
ArithmeticException levantada!

Usando Finally
Podemos utilizar a clusula finally para agrupar aes "de limpeza"
public void meuMetodoDeEscrita (File arquivo) { try { f = new FileOutputStream(arquivo); //codigo que pode levantar outros tipos de excecoes } catch (ArrayIndexOutOfBoundException e) System.out.println ("Uso errado dos indices de um array."); } catch (IOException e) { System.out.println ("Problemas com o acesso ao arquivo."); throw e3 } finally { if (f != NULL) { System.out.println ("Fechando o arquivo..."); f.close(); } else System.out.println ("Erro: escrita abortada."); } }

Definindo Suas Prprias Excees


Vamos implementar uma exceo que sinalize a tentativa de executar uma transacao em uma conta inexistente Passos:
Criar subclasse de Exception
class ContaInexistenteException extends Exception { ContaInexistenteException(String msg) { super(msg); } }

Levantar a exceo quando ocorrer uma situao anormal


class ContaBancaria { ... public void executaTransacao(int numero)

throws ContaInexistenteException
{ ... if (existeConta(numero)) { ... } else { String msg = Conta + numero + inexistente; throw new ContaInexistenteException(String msg); }

}
}

Capturar e tratar a exceo


try { executaTransao(numeroConta);

} catch (ContaInexistenteException e) {
System.out.println(e.getMessage()); ...

} catch (DigitoVerificadorErradoException e) {
... } finally {

...
}

// Este bloco SEMPRE sera executado

Excees - Resumo
Tratamento de excees confere homogeneidade e legibilidade ao cdigo
As palavras chave envolvidas no tratamento de excees so:
throws, try, catch e finally, throw

Defina suas prprias excees para tratar entradas de dados invlidas ou situaes anormais dos seus mtodos

Você também pode gostar