Sunteți pe pagina 1din 33

Tratamento de Excees

Universidade Catlica de Pernambuco


Cincia da Computao
Prof. Mrcio Bueno
poonoite@marciobueno.com
Fonte: Material da Prof Karina Oliveira

Introduo

Excees

So eventos que ocorrem durante a execuo


de um programa e quebram o fluxo normal de
execuo das instrues.
Indicam a ocorrncia de erros ou condies
excepcionais no programa.

Programao Orientada a Objeto - Mrcio Bueno

Sem Tratamento de Excees

Exemplo 1:

Erro em tempo de execuo!

public class Divide {


public static void main (String args[]) {
int dividendo = Integer.parseInt(args[0]);
int divisor = Integer.parseInt(args[1]);
divide(dividendo, divisor);
}

ArithmeticException lanada!

public static void divide(int dividendo, int divisor) {


System.out.println(Diviso = + (dividendo/divisor));
}

Exception in thread main java.lang.ArithmeticException: by zero


Programao Orientada a Objeto - Mrcio Bueno

Sem Tratamento de Excees

Exemplo 2:
Erro em tempo de execuo!
(ArrayIndexOutOfBoundsException)

public class Divide {


public static void main (String args[]) {
int dividendo = Integer.parseInt(args[0]);
int divisor = Integer.parseInt(args[1]);
divide(dividendo, divisor);
}
public static void divide(int dividendo, int divisor) {
System.out.println(Diviso = + (dividendo/divisor));
}
}

Exception in thread main java.lang.ArrayIndexOutOfBoundsException


Programao Orientada a Objeto - Mrcio Bueno

Tipos de Excees

Erros aritmticos;
Estouro de limite de array;
Entrada de dados invlidos;
Erros na manipulao de arquivos;
Erros na comunicao com bancos de
dados;
Falhas de comunicao entre programas
distribudos;
Entre outros.
Programao Orientada a Objeto - Mrcio Bueno

Palavras Reservadas

Em Java:
try, catch e finally
Define um bloco de tratamento de
exceo.
throws
Declara que um mtodo pode lanar
uma exceo ou mais excees.
throw
Lana uma exceo.
Programao Orientada a Objeto - Mrcio Bueno

Tratamento de Excees

Usando try, catch e finally

Define um bloco de tratamento de exceo.


try {
...
} catch (Excecao1 e1) {
...
} catch (Excecao2 e2) {
...
} finally {
...
}
Programao Orientada a Objeto - Mrcio Bueno

Tratamento de Excees

Usando try catch Exemplo 1:

public class Divide {


public static void main (String args[]) {
int dividendo = Integer.parseInt(args[0]);
int divisor = Integer.parseInt(args[1]);
try {
divide(dividendo, divisor);
} catch (ArithmeticException e) {
System.out.println(No pode dividir por zero!);
}
}
public static void divide(int dividendo, int divisor) {
System.out.println(Diviso = + (dividendo/divisor));
}

Programao Orientada a Objeto - Mrcio Bueno

Tratamento de Excees

Usando try catch Exemplo 2:

public class Divide {


public static void main (String args[]) {
try {
int dividendo = Integer.parseInt(args[0]);
int divisor = Integer.parseInt(args[1]);
divide(dividendo, divisor);
} catch (ArithmeticException e1) {
System.out.println(No pode dividir por zero!);
} catch (ArrayIndexOutOfBoundsException e2) {
System.out.println(Favor Informar dois nmeros!);
}
}
public static void divide(int dividendo, int divisor) {
System.out.println(Diviso = + (dividendo/divisor));
}
}

Programao Orientada a Objeto - Mrcio Bueno

Usando try catch Exemplo 3:

import javax.swing.JOptionPane;
public class Divide {
public static void main (String args[]) {
int dividendo, divisor;
while(true){
try {
dividendo = Integer.parseInt(JOptionPane.showInputDialog
("Digite o dividendo: "));
divisor = Integer.parseInt(JOptionPane.showInputDialog
("Digite o divisor: "));
divide(dividendo, divisor);
break;
} catch (ArithmeticException e1) {
JOptionPane.showMessageDialog(null,
"No pode dividir por zero!");
} catch (NumberFormatException e2) {
JOptionPane.showMessageDialog(null,
"Favor informar apenas nmeros inteiros!");
}
}
}
/* Mtodo divide aqui */
}

10

Tratamento de Excees

Usando try catch Exemplo 4:

public class OperacoesMatematicas {


public static void main (String args[ ]) {
System.out.println(Incio do Programa.);
try {
int a= Integer.parseInt(JOptionPane.showInputDialog(a:));
int b= Integer.parseInt(JOptionPane.showInputDialog(b:));
System.out.println(Diviso = + (a / b));
System.out.println(Multiplicao = + (a * b));
System.out.println(Soma = + (a + b));
System.out.println(Subtrao = + (a - b));
} catch (ArithmeticException e1) {
System.out.println(No pode dividir por zero!);
} catch (NumberFormatException e2) {
System.out.println(Digite um nmero vlido!);
}
System.out.println(Fim do Programa.);
}
}

Programao Orientada a Objeto - Mrcio Bueno

11

Tratamento de Excees

Usando throws

Declara que um mtodo pode lanar uma ou


mais excees.
Um mtodo Java pode lanar uma exceo se
encontrar uma situao com a qual ele no
possa lidar;
Um mtodo deve informar ao compilador os
parmetros que ele recebe, o valor que ele
retorna e tambm o que pode acontecer de
errado usando throws.
Programao Orientada a Objeto - Mrcio Bueno

12

Tratamento de Excees

Usando throws

Sintaxe:

public void metodo( ) throws Excecao {


...
}
public void metodo( ) throws Excecao1, Excecao2 {
...
}
Programao Orientada a Objeto - Mrcio Bueno

13

Tratamento de Excees

Usando throws Exemplo1:

import java.io.FileWriter;

public class GravaArquivo {


public static void grava(String texto) {
FileWriter fw = new FileWriter("teste.txt");
fw.write(texto);
fw.close( );
}
}
Programao Orientada a Objeto - Mrcio Bueno

14

Tratamento de Excees

Usando throws Exemplo 1 (Cont.):

O trecho de cdigo anterior ir causar um


erro de compilao.
O compilador exige que se declare a exceo
IOException na clusula throws do mtodo ou
que a mesma seja tratada dentro do mtodo!

Programao Orientada a Objeto - Mrcio Bueno

15

Tratamento de Excees

Usando throws Exemplo 1 (Cont.):

import java.io.FileWriter;
public class GravaArquivo {
public static void grava(String texto) throws IOException {
FileWriter fw = new FileWriter(teste.txt);
fw.write(texto);
fw.close( );
}
}

Programao Orientada a Objeto - Mrcio Bueno

16

Tratamento de Excees

Usando throws Exemplo 1 (Cont.):

import java.io.FileWriter;
Mais alguma
import java.io.IOException;
exceo deveria
public class GravaArquivo {
ser tratada nesse
public static void main(String args[]) {
cdigo?
try {
grava(args[0]);
} catch (IOException e) {
System.out.println(Erro ao gravar arquivo!);
System.out.println(e); // Imprime detalhadamente a Exceo.
e.printStackTrace( ); // Imprime detalhadamente a Exceo.
}
}
}
Programao Orientada a Objeto - Mrcio Bueno
17

Usando throws Exemplo 1 (Cont.):

import java.io.FileWriter;
import java.io.IOException;
public class GravaArquivo {
public static void grava(String texto) throws IOException{
FileWriter fw = new FileWriter("teste.txt");
fw.write(texto);
fw.close( );
}
public static void main(String args[]) {
try {
grava(args[0]);
}catch(IOException e) {
System.out.println("Erro ao gravar arquivo!");
System.out.println(e); // Imprime detalhadamente a Exceo.
e.printStackTrace( ); // Imprime detalhadamente a Exceo.
}catch(ArrayIndexOutOfBoundsException e){
System.out.println(Voc deve digitar algo para gravar no arquivo!");
System.out.println(e); // Imprime detalhadamente a Exceo.
e.printStackTrace( ); // Imprime detalhadamente a Exceo.
}
}
}
Programao Orientada a Objeto - Mrcio Bueno

18

Tratamento de Excees

Usando throws Exemplo 1 (Cont.):

No cdigo anterior, caso no haja


argumentos:

Voc deve digitar algo para gravar no arquivo!


java.lang.ArrayIndexOutOfBoundsException: 0
java.lang.ArrayIndexOutOfBoundsException: 0
at GravaArquivo.main(GravaArquivo.java:11)

Programao Orientada a Objeto - Mrcio Bueno

19

Tratamento de Excees

Usando finally

O trecho de cdigo colocado dentro da


clusula finally sempre ser executado,
independente do cdigo que pode lanar
exceo executar com sucesso ou com erro.

Programao Orientada a Objeto - Mrcio Bueno

20

Usando finally Exemplo:


import java.io.FileWriter;
import java.io.IOException;
public class GravaArquivo2 {
public static void main(String args[ ]) {
FileWriter fw = null;
try {
fw = new FileWriter(teste.txt);
fw.write(args[0]);
} catch (IOException e) {
System.out.println(Erro ao gravar arquivo!);
System.out.println(e); // Imprime detalhes da Exceo.
} finally {
try{
fw.close();
}catch(IOException e){
System.out.println("Erro ao fechar arquivo!");
System.out.println(e); // Imprime detalhes da Exceo.
}
}
Programao Orientada a Objeto - Mrcio Bueno
}

21

Lanando e tratando Excees


pela Superclasse

Exemplo 1: Excecao1 e Excecao2 so


subclasses de Excecao!
Excecao

Excecao1

Excecao2

Programao Orientada a Objeto - Mrcio Bueno

22

Lanando e tratando Excees


pela Superclasse

Exemplo 1 (Cont.):
As excees declaradas com throws podem
ser superclasses das excees que so
realmente lanadas:
public void metodo throws Excecao1, Excecao2 {
...
}
public void metodo throws Excecao {
...
}
Programao Orientada a Objeto - Mrcio Bueno

23

Lanando e tratando Excees


pela Superclasse

Exemplo 2: Tratando pelas subclasses

public class Divide {


public static void main (String args[]) {
try {
int dividendo = Integer.parseInt(args[0]);
int divisor = Integer.parseInt(args[1]);
divide(dividendo, divisor);
} catch (ArithmeticException e1) {
System.out.println(No pode dividir por zero!);
} catch (ArrayIndexOutOfBoundsException e2) {
System.out.println(Favor Informar dois nmeros!);
}
}
public static void divide(int dividendo, int divisor) {
System.out.println(Diviso = + (dividendo/divisor));
}
}
Programao Orientada a Objeto - Mrcio Bueno

24

Lanando e tratando Excees


pela Superclasse

Exemplo 2: Tratando pela superclasse

ArithmeticException e
ArrayIndexOutOfBoundsException so
subclasses de Exception!
Exception
RuntimeException

ArithmeticException

ArrayIndexOutOfBoundsException

Programao Orientada a Objeto - Mrcio Bueno

25

Lanando e tratando Excees


pela Superclasse

Exemplo 2: Tratando pela superclasse

public class Divide {


public static void main (String args[]) {
try {
int dividendo = Integer.parseInt(args[0]);
int divisor = Integer.parseInt(args[1]);
divide(dividendo, divisor);
} catch (Exception e) {
System.out.println(Erro ao executar programa!);
}
}
public static void divide(int dividendo, int divisor) {
System.out.println(Diviso = + (dividendo/divisor));
}

Programao Orientada a Objeto - Mrcio Bueno

26

Hierarquia de Excees Java


Throwable

Error

Exception
RuntimeException

OBSERVAO: O compilador no exige que se declare ou


trate excees de qualquer subclasse de Error ou de
RuntimeException.
Programao Orientada a Objeto - Mrcio Bueno

27

Tratamento de Excees

Usando throw

Palavra reservada utilizada para lanar uma


exceo.

Exemplo 1:
// Instanciando e lanando o objeto Exception
throw new Exception(Mensagem de ERRO!);
Exemplo 2:
// Instanciao do objeto Exception
Exception e = new Exception(Mensagem de ERRO!);
// Lanando a exceo
throw e;
Programao Orientada a Objeto - Mrcio Bueno

28

Definindo suas Prprias


Excees

Um programa pode ter um problema que no


esteja descrito adequadamente em nenhuma
das classes de excees
Criar sua prpria exceo como uma subclasse
da classe Exception

Exemplo:

public class ExcecaoTextoInvalido extends Exception {


public ExcecaoTextoInvalido(String mensagem) {
super(mensagem);
}
}
Programao Orientada a Objeto - Mrcio Bueno

29

Definindo suas Prprias


Excees

Exemplo (cont.):

public static void grava(String texto) throws IOException, ExcecaoTextoInvalido {


FileWriter fw = null;
if (texto == null || texto.trim( ).equals("")) {
throw new ExcecaoTextoInvalido("Texto invlido: " + texto);
} else {
fw = new FileWriter("teste.txt");
fw.write(texto);
}
}

Programao Orientada a Objeto - Mrcio Bueno

30

Definindo suas Prprias


Excees

Exemplo (cont.):

public static void main(String[ ] args) {


String texto = JOptionPane.showInputDialog("Digite um texto:");
try {
grava(texto);
} catch (IOException e) {
e.printStackTrace();
} catch (ExcecaoTextoInvalido e) {
System.out.println(e.getMessage());
}
}

Programao Orientada a Objeto - Mrcio Bueno

31

Exerccios

Exerccio 1:

Implementar a exceo
ExcecaoDivisaoPorZero. Esta exceo ser
lanada pelo mtodo double calcula(double a,
double b) da classe Divisao.
Implementar tambm a aplicao
AplicacaoDivisao que recebe dois nmeros
informados pelo usurio e faz a diviso do
primeiro pelo segundo usando uma chamada
ao mtodo calcula da classe Divisao.
Programao Orientada a Objeto - Mrcio Bueno

32

Exerccios

Exerccio 2: Implementar o tratamento de excees


para o Cadastro de Contas.

Os mtodos set das classes bsicas de negcio lanaro


excees do tipo ExcecaoDadoInvalido quando o dado passado
como parmetro no for vlido.
O mtodo inserir da classe CadastroContas deve lanar a
exceo ExcecaoRepositorio quando no puder mais inserir
contas no array e a exceo ExcecaoElementoJaExistente
quando uma conta com um mesmo nmero j estiver cadastrada.
O mtodo buscar da classe CadastroContas deve lanar a
exceo ExcecaoElementoInexistente quando a conta que se
deseja buscar no estiver cadastrada.

Programao Orientada a Objeto - Mrcio Bueno

33

S-ar putea să vă placă și