Programação Orientada a Objetos (DPADF 0063) Aula 7 – Tratamento de Exceções Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior de Tecnologia em Sistemas para Internet Prof. Bruno B. Boniati – www.cafw.ufsm.br/~bruno Exceptions Exeptions • Uma exceção é um evento, normalmente associado a um erro, e que ao ser disparado interrompe o fluxo normal de execução da aplicação. • Exceções ocorrem durante a execução de aplicativos, como por exemplo divisões por zero, acesso a posições inválidas (em listas ou arrays). • Como o próprio nome indica ... exceções são situações que não ocorrem com frequência. Exeptions (cont.) • Erros são comuns em tempo de execução e as aplicações devem estar preparadas para tratá-los sem abortar o programa e perder os dados dos usuários. • Tratar os erros é uma tarefa que demanda bastante codificação, tornando muitas vezes o código difícil de entender; • O conceito de tratamento de exceções permite ao programador “lidar” com o problema (tratando-o) e permitindo ao programa continuar sua execução. • Exceções habilitam programadores a escrever códigos robustos e tolerantes a falhas. Vantagens do uso de exceções • Separação do código regular (fluxo normal) do código de tratamento de exceções; • Propagação de erros através dos métodos da pilha de chamadas (método 1, chama o método 2, que chama o método 3 ... somente um deles precisa se preocupar em tratar os erros); • Agrupamento e diferenciação de erros (e seus respectivos tratamentos); • Obrigatoriedade de tratamento (exceções não podem ser ignoradas); Exceções ... exemplos • A classe abaixo possui um método chamado “dividir” que devolve a divisão de um número por seu numerador. O que aconteceria se o usuário informar o valor 0 (zero) para o denominador? E se ele digitar “um” ao invés de 1? Tratamento de Exceções ... Observe o tratamento .. try { //Código a ser exec. } catch (Erro1 e1) { //Código se ocorrer o erro 1 } catch (Erro2 e2) { //Código se ocorrer o erro 2 } finally { //Finalização ... //Código que será executado se //ocorrerem ou não erros } Tratamento de Exceções • Bloco try ▫ Delimita o bloco de código que pode originar exceções; • Bloco catch ▫ Bloco que define como determinada exceção deve ser tratada (o que deve acontecer se ela ocorrer); ▫ Não é necessário que todas as exceções possíveis sejam tratadas (podese utilizar uma superclasse de exceção para agrupar tratamentos ou propagá-la para outro tratador); • Bloco finally ▫ Contém o código responsável pela finalização (fechamento de arquivos, liberação de recursos); ▫ É uma extensão do try, será executado havendo ou não erros. Propagando exceções • Nem sempre uma exceção é tratada localmente (ou seja, no local onde o erro pode acontecer) ... Uma exceção pode ser propagada ... • Propagar uma exceção significa avisar o código que irá chamar o método onde o erro pode ocorrer que ele é um código que merece tratamento (que é propenso a uma determinada exceção). • Uma exceção é propagada através do comando throws Propagando exceções (cont.) • Porque o código abaixo não compila? Algumas construções do código exigem determinadas exceções sejam tratadas ou então propagadas. unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown Hierarquia de exceções em Java • A superclasse de toda exceção é a classe Throwable; • Somente objetos filhos de Throwable podem ser tratados (try/catch/finally) • Throwable se divide em ▫ Error – representando situações anormais da JVM e de difícil recuperação; ▫ Exception – representando situações anormais do programa e que podem ser capturadas e tratadas. Podem ser: Verificadas (checked) quando são geradas por situações não controladas pelo programa (um arquivo que não existe, por exemplo). Seu tratamento pode ser exigido pelo compilador. Não Verificadas (unchecked) geralmente causadas por deficiências no código. Hierarquia de exceções em Java (cont.) Levantando exceções • A hierarquia de classes de exceções pode ser estendida de forma a criar novos tipos de exceções. • Levantar uma exceção significa indicar que um erro ocorreu e precisa de tratamento • Uma exceção é lançada através do comando throw Levantando exceções (cont.) • Nova exceção ... • Levantando (criando) a nova exceção .. Resumindo ... • Exceções são um tipo especial de classe que a linguagem orientada a objetos oferece um tratamento diferenciado ... • Em Java exceções ... ▫ ▫ ▫ ▫ são representadas por classes são lançadas pelo comando throw são tratadas pela estrutura try-catch-finally podem ser verificadas pelo compilador ou não; Exercícios para fixação Erros, avisos e informações ... • Codifique três classes para representar possíveis exceções: erros (errors), avisos (warnings) e informações (informations). • Cada classe de exceção deve conter um método construtor que recebe a mensagem a ser produzida e a concatena com uma das palavras: ERRO, AVISO e INFORMAÇÃO. • Faça uma aplicação para lançar os erros produzidos e faça um tratamento para cada uma das exceções utilizando os métodos da classe JOptionPane (ex. showMessageDialog) para apresentar as mensagens decorrentes das exceções com seus respectivos ícones.