Baixe o app para aproveitar ainda mais
Prévia do material em texto
Isaias Camilo Boratti 9. Tratamento de Exceções Exceção : Consiste em um evento que ocorre quando, durante a execução de um aplicativo, é solicitada a execução de uma ação que a máquina não consegue realizar. Exceção --> erro de execução Exemplos: - Divisão por zero; - Encontrar o valor numérico de um string que não representa um valor; - Em um array, acessar um elemento fora da faixa; - Solicitar execução de um método para um objeto cuja referência vale null; - Memória insuficiente; - Abrir um arquivo que não existe no local especificado; Isaias Camilo Boratti - Sempre que ocorre uma exceção, Java cria automaticamente um objeto que representa a exceção. - Ao ocorrer uma exceção, o objeto que representa a exceção verifica se não existe algum código definido pelo projetista que deve ser executado para o tratamento da exceção. Caso não exista, o programa será automaticamente abortado. Exemplo: ................. int a=10; int b, c; String s = JOptionPane.showInputDialog(“ Digite um valor” ); b = Integer.parseInt(s); // possível erro !! c = a/b; // possível erro Isaias Camilo Boratti ...................... int a = 10; int b,c; try { String s = JOptionPane.showInputDialog(“Digite um valor” ); b = Integer.parseInt(s); c = a/b; } catch (Exception e) { System.out.println(“Ocorreu algum erro” ); } ................... ....................... int a = 10; int b, c; try { String s = JOptionPane.showInputDialog(“ Digite um valor”); b = Integer.parseInt(s); c = a / b; } catch (NumberFormatException nfe) { System.out.println(“ Foi digitado valor inválido” ); } catch (DivideByZeroException d) { System.out.println(“ Ocorreu divisão por zero” ); } ......................... Bloco try try { /* coloque aqui o código que a máquina tentará executar e que poderá causar alguma erro - exceção */ } catch ( ClasseExcecao1 e1) { /* coloque aqui as instruções que serão executadas caso ocorra uma exceção da classe ClasseExcecao1 */ } catch (ClasseExcecao2 e2) { /* coloque aqui as instruções que serão executadas caso ocorra uma exceção da classe ClasseExcecao2 */ } .............................. finally { /* bloco opcional. Só é obrigatório se não for colocado nenhum catch. Estas instruções serão executadas ocorrendo ou não uma exceção */ } Algumas classes de exceção (java.lang) Exception ( Superclasse) RuntimeException ArithmeticException DivideByZeroException (Divisão por zero) IndexOutOfBoundsException ArrayIndexOutOfBoundsException (índice array fora da faixa) StringIndexOutBoundsException (índice string fora do intervalo) NegativeArraySizeException (tamanho negativo do array) NullPointerException (uso de um objeto cuja referência vale null) IllegalArgumentException NumberFormatException (valor não está no formato adequado) SecurityException (acessar dados de um arquivo não permitido) IOException EOFException (tentar ler após fim de arquivo) FileNotFoundException (arquivo não encontrado) Propagação de exceções (throws) Caso no corpo de um método existam instruções que podem gerar exceções e o projetista não deseje tratar no próprio método, é possível fazer com que estas exceções sejam deixadas para serem tratadas por quem ativou o método. Exemplo: import javax.swing.*; public class Interfaces { public int leInteiro() throws NumberFormatException { /* Na execução deste método, caso ocorra uma exceção da classe NumberFormatException e este método não tratá-la, a exceção será propagada (throws) para quem ativar o método */ String s = JOptionPane.showInputDialog(“Digite um valor inteiro”); return Integer.parseInt(s); } } Isaias Camilo Boratti public class Principal { public static void main (String arg[]) { int i; Interface umaI = new Interface(); try { i = umaI.leInteiro(); } catch (NumberFormatException e) { i = -1; } ............................... } } Uma exceção também pode ser parcialmente tratada e após propagada. public int leInteiro() throws NumberFormatException, NullPointerException { try { String s=JOptionPane.showInputDialog(“Digite um valor”); int i = s.length(); // possível exceção return Integer.parseInt(s); } catch (NumberFormatException e) {JOptionPane.showMessageDialog(null, “valor digitado não número”); throw e; // propaga exceção } /* Caso ocorra uma exceção da classe NumberFormatException esta será tratada parcialmente e após propagada.. Só é possível uma instrução throw se a exceção que a instrução especifica é de uma classe compatível com a especificada na cláusula throws. Se ocorrer um exceção da classe NullPointerException esta será propagada para quem ativou o método. */ Isaias Camilo Boratti import javax.swing.*; public class Interface { public void escreve( String m) { System.out.println(m); } public int leInteiroPositivo() { /* Este método exige do usuário um inteiro positivo. Caso o usuário desista da entrada de dados será devolvido –1 */ boolean valido = false; int valor; String s; Isaias Camilo Boratti while (!valido) { valido = true; s = JOptionPane.showInputDialog(“Digite int. positivo”); if (! (s==null) ) try { valor = Integer.parseInt(s); if (valor > 0 ) return valor; else { JOptionPane.showMessageDialog(null, “ valor < 0 “); valido = false; } } catch (Exception e) { valido = false; JOptionPane.showMessageDialog(null, “ valor não inteiro”); } } // fim bloco while return –1; }}
Compartilhar