Programação e Laboratório II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo - Exceções • Exceções – Exceções ocorrem quando alguma condição excepcional acontece no decorrer da execução • Interrompendo a execução do programa – Tratar as exceções significa gerenciar estes erros – Quando ocorre alguma situação adversa, um objeto do tipo Exception é lançado Programação II – Prof. Mateus Raeder Exceções • Exemplo: public class Calculadora{ private double resultado; public double dividir (int x, int y){ resultado = x/y; return resultado; } } – E se y = 0? Programação II – Prof. Mateus Raeder Exceções • Exemplo: public class Calculadora{ private double resultado; public double dividir (int x, int y){ try{ resultado = x/y; }catch(ArithmeticException e){ System.out.println("ERRO: divisão por 0"); } System.out.println("Linha após a exceção"); return resultado; } } Programação II – Prof. Mateus Raeder Exceções • Mais de uma exceção: public class Calculadora{ private double resultado; public double dividir (int x, int y){ try{ resultado = x/y; }catch(ArithmeticException e){ System.out.println("ERRO: divisão por 0"); e.printStackTrace(); }catch(Exception e){ System.out.println("ERRO!"); e.printStackTrace(); } System.out.println("Linha após a exceção"); return resultado; } } Programação II – Prof. Mateus Raeder Exceções • Mais de uma exceção: public class Array { public void inicializaArray(int a, int b){ try{ int[] array = new int[10]; array[2] = a/b; array[23] = 7; }catch(ArithmeticException ae){ System.out.println("ERRO ARITMÉTICO: "+ae); }catch(ArrayIndexOutOfBoundsException oe){ System.out.println("ÍNDICE INVÁLIDO: "+oe); } } } Programação II – Prof. Mateus Raeder Exceções • Mais de uma exceção: public class Array { public void inicializaArray(int a, int b){ try{ int[] array = new int[10]; array[2] = a/b; array[23] = 7; }catch(ArithmeticException ae){ System.out.println("ERRO ARITMÉTICO: "+ae); }catch(ArrayIndexOutOfBoundsException oe){ System.out.println("ÍNDICE INVÁLIDO: "+oe); }finally{ System.out.println(“Trecho executado sempre"); } } } Programação II – Prof. Mateus Raeder Exceções • Mais um exemplo: import java.util.Scanner; public class TesteExcecao { public static void main(String args[]){ try{ Scanner s = new Scanner(System.in); int teste = Integer.parseInt(s.next()); System.out.println(teste); }catch(Exception e){ e.printStackTrace(); } } } Programação II – Prof. Mateus Raeder Exceções • Criando exceções próprias: public class MinhaExcecao extends Exception { private String mensagem; public MinhaExcecao(String mensagem){ this.mensagem = mensagem; } public String toString() { return "MinhaExcecao [" + mensagem + "]"; } } Programação II – Prof. Mateus Raeder Exceções import java.util.Scanner; • Criando exceções próprias: public class TesteExcecao { public static void main(String args[]){ try{ Scanner s = new Scanner(System.in); System.out.print("Digite o tamanho do array: "); int[] meuArray = new int[s.nextInt()]; System.out.print("Digite a posição do array que deseja acessar: "); int posicao = s.nextInt(); System.out.print("Digite o valor que deseja inserir: "); int valor = s.nextInt(); meuArray[posicao] = valor; if(valor >= 1000){ MinhaExcecao me = new MinhaExcecao("Valor inválido"); throw me; } System.out.println("Valor da posição: "+meuArray[posicao]); }catch(MinhaExcecao me){ System.out.println(me.toString()); }catch(ArrayIndexOutOfBoundsException oe){ oe.printStackTrace(); } System.out.println("Esta linha é impressa sempre?"); } } Programação II – Prof. Mateus Raeder Exceções • Criando exceções próprias: – Método que lança exceção: public class ExcecaoMetodo { public int meuMetodoComExcecao(int a) throws MinhaExcecao{ if(a % 2 == 0) throw new MinhaExcecao("Número é par!"); return a; } } Programação II – Prof. Mateus Raeder Exceções import java.util.InputMismatchException; import java.util.Scanner; • Criando exceções próprias: public class MainExcecaoMetodo { public static void main(String args[]){ boolean correto = false; ExcecaoMetodo em = new ExcecaoMetodo(); try{ Scanner s = new Scanner(System.in); System.out.print("Digite um número ímpar: "); em.meuMetodoComExcecao(s.nextInt()); correto = true; }catch(MinhaExcecao me){ System.out.println(me.toString()); }catch(InputMismatchException ie){ ie.printStackTrace(); } if(!correto) System.out.println("Não deu certo... =("); else System.out.println("Certo... =D"); } } Programação II – Prof. Mateus Raeder