Controlando Erros com Exceç Exceções )? O que é uma Exceç Exceção (exception (exception)? – Uma exceç exceção é um evento que ocorre durante a execuç execução de um programa que indica a ocorrência de algo especial. – Uma exceç exceção é resultado da ocorrência de erros durante a execuç execução. – Quando ocorre um erro em um mé método, este método cria um objeto Exception com os dados do erro. – O sistema de execuç execução com a Exception tenta encontrar “algué alguém” para tratar o erro. Controlando Erros com Exceç Exceções class Exception1 { public static void main(String main(String args[]) args[]) { int i=0; int j=1/i; System.out. println("Não ("Não vai funcionar."); System.out.println } nome da } – Este programa gera a saí saída: java. java.lang. lang.ArithmeticException: ArithmeticException: / by zero at Exception1.main (exception1.java java:4) :4) Exception1.main(exception1. nome da classe e do método Exceç Exceções class Exception3 { static void GeraException() GeraException() { tratamento try { de exceção int i=0; int j=1/i; } catch (ArithmeticException (ArithmeticException e) { System.out. println("Erro ("Erro aritmetico: System.out.println aritmetico:\n } } public static void main(String main(String args[]) args[]) { GeraException(); GeraException(); System.out. println("Não ("Não vai funcionar."); System.out.println } } java. java.lang. lang.ArithmeticException: ArithmeticException: / by zero at Exception2.GeraException (exception2.java java:4) :4) Exception2.GeraException(exception2. at Exception2.main (exception2.java java:8) :8) Exception2.main(exception2. – A exceç exceção foi lanç lançada do mé método GeraException para o main e em seguida para o sistema (não houve tratamento explí explícito). Exceç Exceções Erro aritmetico: aritmetico: java. java.lang. lang.ArithmeticException: ArithmeticException: / by zero Vai funcionar. } – Este programa gera a saí saída: Erro aritmetico: aritmetico: java. java.lang. lang.ArithmeticException: ArithmeticException: / by zero Vai funcionar. Tipos de Exceç Exceções class Exception4 { static void GeraException() GeraException() { int i=0; O erro ocorrido em GeraException() int j=1/i; } foi tratado no main() } " + e); public static void main(String main(String args[]) args[]) { GeraException(); GeraException(); System.out. println("Vai ("Vai funcionar."); System.out.println } – Este programa gera a saí saída: – Este programa gera a saí saída: nome do arquivo e linha onde o erro ocorreu Tratando Exceç Exceções class Exception2 { static void GeraException() GeraException() { int i=0; int j=1/i; } public static void main(String main(String args[]) args[]) { try { GeraException(); GeraException(); } catch (ArithmeticException (ArithmeticException e) { System.out. println("Erro ("Erro aritmetico: System.out.println aritmetico: } System.out. println("Vai ("Vai funcionar."); System.out.println } exceção e o motivo " + e); Existem dois tipos de exceç exceções: 1. descendentes da classe RuntimeException Ö não precisa ser tratada nem lanç lançada, o erro será será tratado pelo sistema 2. descendentes da classe Exception Ö deve ser tratada ou lanç lançada, se não a compilaç compilação não terá terá sucesso. Este tipo de exceç exceção é dito “checked” checked” 1 Exception Exception import java. java.io. io.FileInputStream; FileInputStream; import java. java.io.File; io.File; Erros do programa anterior: class Main { Main. Main.java:8: java:8: unreported exception java. java.io. io.FileNotFoundException; FileNotFoundException; must be caught or declared to be thrown FileInputStream in = new FileInputStream(file); FileInputStream(file); ^ Main. Main.java:11: java:11: unreported exception java. java.io. io.IOException; IOException; must be caught or declared to be thrown while ((c=in.read ()) > -1) { ((c=in.read()) ^ Main. Main.java:15: java:15: unreported exception java. java.io. io.IOException; IOException; must be caught or declared to be thrown in.close(); ^ public static void main(String[] main(String[] args) args) { File file = new File("arquivo.dat "); File("arquivo.dat"); FileInputStream in = new FileInputStream(file); FileInputStream(file); int c; while ((c=in.read ()) > -1) { ((c=in.read()) if (!Character .isSpace(( char)c)) )c)) (!Character. isSpace((char System.out. print(( ((char char)c); )c); System.out.print } in.close(); System.out.flush(); System.out.flush(); } } Exceç Exceções Exceç Exceções pode lançar uma exceção ao método chamador import java. java.io.*; io.*; import java. java.io.*; io.*; class Main { public static void main(String[] main(String[] args) args) { File file = new File(args [0]); File(args[0]); try { FileInputStream in = new FileInputStream(file); FileInputStream(file); int c; while ((c=in.read ()) > -1) { ((c=in.read()) if (!Character .isSpace(( char)c)) )c)) (!Character. isSpace((char System.out. print(( ((char char)c); )c); System.out.print } in.close(); System.out.flush(); System.out.flush(); } catch (FileNotFoundException (FileNotFoundException e) { System. System.err. err.println(file println(file + " is not found"); found"); } catch (IOException (IOException e) { e.printStackTrace (); e.printStackTrace(); } } } class Exception5 { static void GeraException() GeraException() throws Exception { File file = new File("arquivo.dat "); File("arquivo.dat"); FileInputStream in = new FileInputStream(file); FileInputStream(file); } lança exceção Exceç Exceções public static void main(String main(String args[]) args[]) { GeraException(); GeraException(); System.out. println("Não ("Não vai funcionar."); System.out.println } } – Na compilaç compilação obteremos: Exception5.java :11: unreported exception Exception5.java:11: java. java.lang. lang.Exception; Exception; must be caught or declared to be thrown GeraException(); GeraException(); ^ 1 error Exceç Exceções pode lançar uma exceção ao método chamador class Exception5 { static void GeraException() GeraException() throws Exception { throw new Exception(" Lancando uma excecao."); Exception("Lancando excecao."); } class Exception6 { static void GeraException() GeraException() throws Exception { throw new Exception(" Lancando excecao."); Exception("Lancando excecao."); } public static void main(String main(String args[]) args[]) throws Exception { GeraException(); GeraException(); System.out. println("Não ("Não vai funcionar."); System.out.println } public static void main(String main(String args[]) args[]) { GeraException(); GeraException(); System.out. println("Não ("Não vai funcionar."); System.out.println } } – Na compilaç compilação obteremos: cria instância da Exception exception5.java :7: Exception java. exception5.java:7: java.lang. lang.Exception must be caught, caught, or it must be declared in the throws clause of this method. method. GeraException(); GeraException(); ^ 1 error A exceç exceção Exception‚ Exception‚ é dita “checked” checked” pois ela deve obrigatoriamente ser tratada ou lanç lançada. } – Este programa gera a saí saída: java. java.lang. lang.Exception: Exception: Lancando excecao. excecao. at Exception6.GeraException (exception6.java java:3) :3) Exception6.GeraException(exception6. at Exception6.main (exception6.java java:7) :7) Exception6.main(exception6. Aqui a exceç exceção não é tratada, ela é apenas enviada (lanç (lançada) a um ní nível superior. 2 Exceç Exceções - finally Exceç Exceções – try - catch class Exception7 { static void GeraException() GeraException() throws Exception { throw new Exception(" Lancando excecao."); Exception("Lancando excecao."); } public static void main(String main(String args[]) args[]) { try { GeraException(); GeraException(); } catch (Exception (Exception e) { System.out. println("Erro: ("Erro: " + e); System.out.println } System.out. println("Vai ("Vai funcionar."); System.out.println } } – Este programa gera a saí saída: class Exception8 { static void GeraException() GeraException() { int i=0; int j=1/i; } public static void main(String main(String args[]) args[]) { try { GeraException(); GeraException(); } finally { System.out. println("Vai ("Vai funcionar sempre."); System.out.println } System.out. println("Não ("Não vai funcionar."); System.out.println } } – Este programa gera a saí saída: Vai funcionar sempre. java. java.lang. lang.ArithmeticException: ArithmeticException: / by zero at Exception8.GeraException (exception8.java java:4) :4) Exception8.GeraException(exception8. at Exception8.main (exception8.java java:9) :9) Exception8.main(exception8. Erro: java. java.lang. lang.Exception: Exception: Lancando excecao. excecao. Vai funcionar. Criando Novas Exceç Exceções class ExcecaoDeTeste extends Exception { public String toString() toString() { return "ExcecaoDeTeste aconteceu"; } } class Exception9 { static void GeraException() GeraException() throws ExcecaoDeTeste { throw new ExcecaoDeTeste(); ExcecaoDeTeste(); } Exceç Exceções class ExcecaoDeTeste extends Exception { public String toString() toString() { return "ExcecaoDeTeste aconteceu"; } } class Exception10 { static void GeraException() GeraException() throws ExcecaoDeTeste { throw new ExcecaoDeTeste(); ExcecaoDeTeste(); } public static void main(String main(String args[]) args[]) { try { GeraException(); GeraException(); } catch (ExcecaoDeTeste (ExcecaoDeTeste e) { System.out. println("Tratando ("Tratando Excecao." System.out.println Excecao." + e); } finally { System.out. .out.println println("Funciona ("Funciona sempre."); System } System.out. println("Vai ("Vai funcionar."); System.out.println } public static void main(String main(String args[]) args[]) { GeraException(); GeraException(); System.out. println("Não ("Não vai funcionar."); System.out.println } } – Na compilaç compilação obteremos: exception9.java :13: Exception ExcecaoDeTeste must be exception9.java:13: caught, caught, or it must be declared in the throws clause of this method. method. GeraException(); GeraException(); ^ 1 error funciona sempre com ou sem exceções } – Este programa gera a saí saída: Tratando Excecao. Excecao.ExcecaoDeTeste aconteceu Funciona sempre. Vai funcionar. 3