• Nenhum resultado encontrado

7.14 Exercícios

No documento Linguagem Java COMPLETA (páginas 108-111)

Escreva, compile e execute todas listagens de código apresentadas neste capítulo.

8

Exceções

Uma exceção é um evento que interrompe o fluxo normal de processamento de uma classe. Este evento é um erro de algum tipo. Isto causa o término inesperado da execução de seu programa.

Estes são alguns dos exemplos de exceções que podem ter ocorridos em exercícios anteriores:  ArrayIndexOutOfBoundsException: ocorre ao acessar um elemento inexistente de um array.  NumberFormatException: ocorre ao enviar um parâmetro não-numérico para o método

Integer.parseInt().

8.1 Manipulando Exceções

Para tratar exceções em Java utilizamos a declaração try-catch-finally. O que devemos fazer para proteger as instruções passíveis de gerar uma exceção é inserí-las dentro deste bloco.

A forma geral de um try-catch-finally é:

try{

//escreva as instruções passíveis de gerar uma exceção //neste bloco

} catch (<exceptionType1> <varName1>){

//escreva aqui o código do seu programa, caso ocorra //uma exceção de um determinado tipo

} . . .

} catch (<exceptionTypen> <varNamen>){

//escreva aqui o código do seu programa, caso ocorra //uma exceção de um determinado tipo

Exceção é um evento que interrompe o

fluxo normal de processamento de

uma classe. Toda exceção é de algum

//atribuindo valor a variável referência Carro carro1 = new Carro();

carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização //criando novo alias

Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância

Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.

2.3.1 Invocação de Métodos

Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela

chamada de um método em um objeto usando o operador binário "." (ponto),

devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). O método invocado no recebedor pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.

Os valores das variáveis em um objeto constituem

o seu estado. Dois objetos distintos têm

o mesmo estado se suas variáveis membro têm os

mesmos valores. } finally {

//escreva a ação que o seu programa executará caso //ocorra ou não um erro ou exceção

}

Exceções geradas durante a execução do bloco try podem ser detectadas e tratadas num bloco catch. O código no bloco finally é sempre executado, ocorrendo ou não a exceção.

A seguir são mostrados os principais aspectos da sintaxe da construção de um try-catch- finally: 1. A notação de bloco é obrigatória, o try.

2. Para cada bloco try, pode haver um ou mais blocos catch, mas somente um bloco finally.

3. Um bloco try deve que ser seguido de pelo menos um bloco catch ou um bloco finally, ou ambos. 4. Cada bloco catch define o tratamento de uma exceção de um tipo.

5. O cabeçalho do bloco catch recebe somente um argumento, que é o tipo da exceção (Exception) que este bloco irá tratar.

6. A exceção deve ser da classe Throwable ou de uma de suas subclasses.

Tomemos, por exemplo, uma classe que imprime o segundo argumento passado através da linha de comandos. Supondo que não há verificação no código para o número de argumentos.

public class ExceptionExample {

public static void main(String[] args) { System.out.println(args[1]);

System.out.println("Finish"); }

}

Ao executar esta classe sem informar nenhum argumento, ao tentar acessar diretamente - conforme o exemplo descrito - o segundo argumento args[1], uma exceção será lançada e interromperá a execução normal do programa. A seguinte mensagem será mostrada na console do sistema:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 at ExceptionExample.main(ExceptionExample.java:5)

Para prevenir que isto ocorra, podemos colocar o código dentro de um bloco try-catch. O bloco finally é opcional. Neste exemplo, não utilizaremos o bloco finally.

public class ExceptionExample {

public static void main(String[] args) { try {

System.out.println(args[1]);

} catch (ArrayIndexOutOfBoundsException exp) { System.out.println("Exception caught!"); }

System.out.println("Finish"); }

}

Listagem 8.1 – Tratando exceção de runtime

Assim, quando tentarmos rodar o programa novamente sem a informação dos argumentos, a saída trataria a exceção e o fluxo do programa não será interrompido, mostrando o resultado:

Linguagem de Programação Java

Seja um Profissional Aprendendo com Profissionais

www.3way.com.br 12

//atribuindo valor a variável referência Carro carro1 = new Carro();

carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização //criando novo alias

Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância

Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.

2.3.1 Invocação de Métodos

Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela

chamada de um método em um objeto usando o operador binário "." (ponto),

devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). O método invocado no recebedor pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.

Os valores das variáveis em um objeto constituem

o seu estado. Dois objetos distintos têm

o mesmo estado se suas variáveis membro têm os

mesmos valores.

111

No documento Linguagem Java COMPLETA (páginas 108-111)

Documentos relacionados