Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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:
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
throw
Levanta uma 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
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 (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."); } }
throws ContaInexistenteException
{ ... if (existeConta(numero)) { ... } else { String msg = Conta + numero + inexistente; throw new ContaInexistenteException(String msg); }
}
}
} catch (ContaInexistenteException e) {
System.out.println(e.getMessage()); ...
} catch (DigitoVerificadorErradoException e) {
... } finally {
...
}
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