A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Programação em Java Tratamento de Exceções Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel.

Apresentações semelhantes


Apresentação em tema: "Programação em Java Tratamento de Exceções Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel."— Transcrição da apresentação:

1 Programação em Java Tratamento de Exceções Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel

2 Introdução Exceções: Situações excepcionais e geralmente indesejáveis que podem ocorrer durante a execução de um programa; podem ser tratadas; Não são erros fatais;

3 Causas Típicas de Exceções Índice de uma lista (Array) fora do intervalo permitido; Problemas em operações aritméticas, tais como "overflows" e divisões por zero; Argumentos inválidos numa chamada a um método; Uso de uma referência que não aponta para um objeto (null); Falta de memória (relativamente improvável em Java graças ao coletor de lixo);

4 Exemplo public class Zero { public static void main (String[] args){ int numerador = 10; int denominador = 0; float result = numerador/denominador; } ● Exception in thread "main" java.lang.ArithmeticException: / by zero ● at Zero.main(Zero.java:7) 

5 Utilizando as Exceções Exceções são objetos em Java; A classe Exception é a superclasse de todas as exceções; Existem vários tipos de exceções já definidos na API Java: Integer: NumberFormatException, Listas, Arrays: IndexOutOfBoundsException File: IOException FileImputStream: FileNotFoundException NullPointerException...

6 Classificação de tipos de Exceções Throwable Error Exception IOException RuntimeException erros internos e exaustão de recursos dentro do Java Runtime. Por ex., estouro de memória -Um casting mau feito; -Acesso a uma posição não existente de um array; -Acesso a um ponteiro null. Tentar ler além do final de um arquivo; Tentar abrir uma URL mal construída

7 Hierarquia de Exceções java.lang.Exception java.lang.ClassNotFoundException java.lang.CloneNotSupportedException java.lang.IllegalAccessException java.lang.InstantiationException java.lang.InterruptedException java.lang.NoSuchFieldException java.lang.NoSuchMethodException java.lang.RuntimeException java.lang.ArithmeticException … java.lang.ArithmeticException java.lang.ArrayStoreExceptionclass java.lang.ClassCastException java.lang.IllegalArgumentException java.lang.IllegalThreadStateException java.lang.NumberFormatException java.lang.IllegalMonitorStateException java.lang.IllegalStateException java.lang.IndexOutOfBoundsException java.lang.ArrayIndexOutOfBoundsException java.lang.StringIndexOutOfBoundsException java.lang.NegativeArraySizeException java.lang.NullPointerException java.lang.SecurityException java.lang.UnsupportedOperationException

8 Tratando Exceções Os métodos Java “geram uma exceção” quando, por uma razão qualquer, falham. O controle, então, passa imediatamente ao “gestor de exceções” apropriado. try { /*código que pode gerar exceção*/ } catch (Exception e) { /*código que trata exceção */ } finally { // tratamento geral }

9 Voltando ao Exemplo public class Zero { public static void main (String[] args){ int numerador = 10; int denominador = 0; try { float result = numerador/denominador; System.out.println(“Dentro do Try"); } catch (Exception e) { System.out.println("Divisão por zero"); e.printStackTrace(); } Divisão por zero java.lang.ArithmeticException: / by zero at Zero.main(Zero.java:7)

10 Tratando Exceções O comando try/catch/finally suporta o tratamento de exceções: no bloco try estão colocados os comandos que podem provocar o lançamento de uma exceção; essas exceções são capturadas em um ou mais comandos catch, colocados após o bloco try; o comando finally contém código a ser executado, independente de outros comandos. É opcional, mas quando presente, é sempre executado;

11 Tratando Exceções Uma vez lançada, uma exceção procura por uma cláusula catch capaz de referenciá-la e tratá-la. Se não houver, o programa irá parar com erro; Um único bloco try pode ter várias cláusulas catch ; A ordem em que as cláusulas catch aparecem, importa. Por esta razão, as exceções mais genéricas devem ser tratadas após as mais específicas;

12 Mais de um catch class MultiCatch { public static void main (String args[]) { try { int a = args.length; System.out.println ("a = "+a); int b = 42/a; int c [ ] = {1}; c[42] = 99; } catch (ArithmeticException e) { System.out.println ("Div por 0: "+e); } catch (ArrayIndexOutOfBoundsException e) { System.out.println ("Estouro indice array: "+e); }

13 O finally A cláusula finally é utilizada para forçar a execução de um bloco de código; Pode ser utilizada com ou sem o bloco catch; A cláusula finally é executada nas seguintes condições: fim normal do método; devido a uma instrução return ou break; caso uma exceção tenha sido gerada; O bloco finally sempre é executado (havendo ou não exceção) !!!

14 Exercício Passe para a máquina virtual java um argumento que seja lido pelo método main: java ExercicioExcecao 5 Converta o argumento para inteiro usando: Integer.parseInt (args[0]) Trate as exceções: NumberFormatException ArrayIndexOutOfBoundsException Teste para as três situações seguintes: java ExercicioExcecao 5 java ExercicioExcecao java ExercicioExcecao ola

15 Propagando Exceções Algumas vezes pode não ser adequado (ou possível) tratar uma exceção no bloco em que ela foi gerada; é possível propagar a exceção para um nível acima na pilha de invocações; void metodoQueNãoTrataExcecao() throws Exception { invoca.metodoQuePodeGerarExcecao(); }

16 Gerando Exceções Para forçar a ocorrência de uma exceção, utiliza-se a palavra reservada throw (no singular) public void metodo1( ) { try { metodo2( ); } catch (IOException e) { System.err.println(e); } public void metodo2( ) throws IOException { if (…problema…) throw new IOException( ); }

17 Exceções definidas pelo programador O programador pode também construir as suas próprias exceções; public class DivideByZeroException extends ArithmeticException { public DivideByZeroException() { super("O denominador na divisão +"inteira tem valor zero"); }

18 Utilizando a Classe Criada //metodo para calcular a divisao public double dividir(double numerador, int denominador) throws DivideByZeroException { if (denominador == 0) throw new DivideByZeroException(); return numerador/denominador; }

19 Exercício Implemente uma classe Conta com um atributo saldo. Implemente, além dos construtores, um método depositar e um método sacar. Garanta, utilizando exceções, que não será depositado um valor negativo na conta. Utilize IllegalArgumentException. Implemente um método main que utilize objetos da classe Conta e realize o tratamento de exceções correspondente. Implemente uma exceção para tratar a situação em que há a tentativa de fazer um saque e deixar o valor negativo. Utilize esta exceção na implementação do método sacar da classe Conta.

20 Resumo Uma exceção é um sinal que indica a ocorrência de uma condição excepcional, como um erro; Gerar (throw) uma exceção é sinalizar a ocorrência de uma condição excepcional; Capturar (catch) uma exceção permite tratá-la, tomando ações necessárias para recuperar a condição correta de execução; Exceções propagam-se na estrutura léxica de blocos de um método e, se não capturadas, propagam-se para o método que a invocou e, sucessivamente, no stack de métodos; Caso não sejam capturadas, originam erro no main();


Carregar ppt "Programação em Java Tratamento de Exceções Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel."

Apresentações semelhantes


Anúncios Google