Renata Araujo Projeto e Construção de Sistemas com Ambientes de Programação UNIRIO 2002.1...

Preview:

Citation preview

Renata Araujo

Projeto e Construção de Sistemas com Ambientes de ProgramaçãoUNIRIO2002.1

Linguagem Java

2

Palavras reservadas

abstract boolean break

byte case catch char

class const continue default

do double else extends

final finally float for

goto if implements importinstanceof int interface long

native new null package

private protected public

return short static super

switch synchronized this throw

throws transient try void

volatile while

3

Tipos básicos

byte ( 8 bits ) Variação: -128...+127

short ( 16 bits ) Variação: -32768...+32767

int ( 32 bits ) Variação: -

2.147.483.648...+2.147.483.647

long ( 64 bits ) Variação: -

9.223.372.036.854.775.808...

+9.223.372.036.854.775.807

float( 32 bits - Precisão simples) Variação:-3,4E-38... +3,4E+38

double ( 64 bits - Precisão dupla) Variação:-1,7E-308... +1,7E+308

char( 16 bits sem sinal) Variação: 0... 65535 Inclui UNICODE ( alfabetos latino,

grego, cirílico, ideogramas japoneses, etc )

boolean ( 1 bit - tipo lógico ) Variação: true ou false

4

Comentários

/* .............*/ // ...............

5

Organização de um programa Java

class <nome da classe 1>{ ...} ...class <nome da classe n>{ ... public static void main(String args[]){ ... }}

6

Estrutura básica de uma classe

Classe em um programa Java é considerada um tipo de dados.

class < nome da classe >{

//atributos < tipo1 > atributo1; < tipo2 > atributo 2;

.... //métodos void método1( ); void método2(<parâmetros>); < tipo > método3( ); < tipo > método4(<parâmetros>);}

7

Exemplos de declaração de classes

class MinhaClasse {}

public class Cachorro { String nome, corOlhos; int idade; boolean temRabo;}

public class Cachorro { String nome, corOlhos; int idade; boolean temRabo;

public void fala() {

JOptionPane.showMessageDialog(null, “Au!Au!");

}

}

8

Exemplos de declaração de classes

class numero_racional{ //atributos int numerador; // Numerador do número int denominador; // Denominador do número

//métodos float racional_para_float(); // Converte números racionais para ponto

flutuante}

9

Construtores

Toda classe em Java deve ter um método especial chamado “construtor”

O objetivo deste método é o de criar objetos de uma classe.

O construtor possui o mesmo nome da classe.

Construtores também podem inicializar os valores dos atributos do objeto sendo criado.

public class Cachorro { //atributos String nome, corOlhos; int idade; boolean temRabo;

//métodos public Cachorro( ) { nome = "Snoopy"; corOlhos = "Brown"; idade = 2; temRabo = true; }}

10

Construtores

Sempre que um construtor é chamado em um programa, um objeto da classe correspondente é criado e armazenado em uma variável.

A chamada a um construtor em Java é feita utilizando-se o comando new.

...

Cachorro novoCachorro;

novoCachorro = new Cachorro( );

...

11

Destrutores

Todo objeto criado é armazenado em memória.

Na maioria das linguagens de programação, é necessário invocar procedimentos para liberar espaço de memória que não esteja mais em uso.

No caso de programação orientada a objetos, quando um objeto não é mais necessário, ele precisa ser destruído.

Para ser destruído, um método precisa ser criado para cada classe, denominado destrutor, responsável por destruir quaisquer instâncias de seus objetos.

Em Java, não há a necessidade de destrutores, uma vez que a linguagem se encarrega de eliminar os objetos que não estejam mais em uso. Este mecanismo é denominado de coleta automática de lixo.

12

Acesso a atributos

O acesso aos atributos de um objeto em java é realizado através do operador “.”

public class Cachorro { //atributos String nome, corOlhos; int idade; boolean temRabo;

//métodos public Cachorro( ) { nome = "Snoopy"; corOlhos = "Brown"; idade = 2; temRabo = true;

}

public AbanarRabo(){

}

public chorar() {

}

}

...

meuCachorro = new Cachorro();

meuCachorro.idade = 5;

...

if meuCachorro.temRabo

meuCachorro.abanarRabo();

else

meuCachorro.chorar();

...

13

Chamada de Métodos - Mensagens

Para ativar um método de um objeto, ou seja, para enviar-lhe uma mensagem, o operador “.” também deve ser utilizado.

public class Cachorro { //atributos String nome, corOlhos; int idade; boolean temRabo;

//métodos public Cachorro( ) { nome = "Snoopy"; corOlhos = "Brown"; idade = 2; temRabo = true;

}

public AbanarRabo(){

}

public chorar() {

}

}

...

meuCachorro = new Cachorro();

meuCachorro.idade = 5;

...

if meuCachorro.temRabo

meuCachorro.abanarRabo();

else

meuCachorro.chorar();

...

14

Operadores

Em Java, trabalha-se com quatro conjuntos de operadores:

básicos aritméticos relacionais lógicos e binários

15

Operadores básicos

. referência a método, função ou atributo

de um objeto

, separador de identificadores

; separador de declarações e comandos

[ ] declarador de matrizes e delimitador

de índices

{ } separador de blocos e escopos locais

( ) precedência de operadores, listas de parâmetros

16

Operadores aritméticos (I)

+ adição x=x + 3

- subtração x=x - 3

/ divisão x=y / 4

% resto da divisão x=y % 5

++ incremento de 1 x++

++x

-- decremento de 1 x--

--x

17

Operadores aritméticos (II)

+= atribuição aditiva x+=3

Tem o mesmo efeito de x=x+3

-= atribuição subtrativa x-=3

*= atribuição multiplicativa x*=3

/= atribuição divisiva x/=3

%= atribuição de resto x%=3

18

Operadores relacionais

= = igual x = = y

!= diferente x!=y

> maior x>y

< menor x<y

>= maior ou igual x>=y

<= menor ou igual x<=y

19

Operadores lógicos e binários (I)

~ negação bit a bit ~x

>> shift right x>>3

>>> shift right sem sinal x>>>3

<< shift left x<<3

>>= atribuição c/ shift right x>>=3

<<= atribuição c/ shift left x<<=3

>>>= atribuição c/ shift right x>>>=3

sem sinal

20

Operadores lógicos e binários (II)

& and lógico bit a bit x&y

| or lógico bit a bit x|y

^ xor lógico bit a bit x^y

&= atribuição com & x&=y

|= atribuição com | x|=y

^= atribuição com ^ x^=y

21

Operadores lógicos e binários (III)

? : if-then-else lógico x =((y>3)?5:6)

|| or dinâmico (x>y) || (z>=6)

&& and dinâmico (x>y) && (z<4)

! not dinâmico !(x>y)

22

Precedência de operadores

( ) [] . ; ,

++ -- !* / %+ ->> << >>>> < >= <=== !=&^|&&||?:=

Aumentaprioridade deresolução

Diminui prioridadede resolução

23

Comandos de controle (I)

Condicional

if ( expressão booleana )

bloco 1;

else bloco2;

24

Comandos de controle (II)

Exemplo de condicional

if ((x>5) && (y!=70)){

x=x+5;

y=z+48;

}

else if (x<=5)

x=48;

else x=20;

25

Comandos de controle (III)

Seleção

switch (expressão){

case valor1: bloco1;

break;

...

case valorN: blocoN;

break;

default: bloco N+1;

}

26

Comandos de controle (IV)

Exemplo de seleção clicado%=4;

switch(clicado){

case 0: saida=3;

break;

case 1: saida=2;

break;

default: saida=0;

}

System.out.println(saida);

27

Comandos de controle (V)

Repetição com while

while( expressão booleana ){

bloco;

}

28

Comandos de controle (VI)

Exemplo de repetição com whilewhile(x>6){

while(y>9){

while((z>=6) && (m!=10)){

z++;

m%=10;

}

y=z+m;

}

x+=y;

}

29

Comandos de controle (VII)

Repetição com do-while

do{

Bloco;

} while(expressão booleana);

30

Comandos de controle (VIII)

Exemplo de repetição com do-while do{

do{

do{

z++;

m%=10;

} while((z>=6) && (m!=10));

y=z+m;

} while(y>9);

x+=y;

} while(x>6);

31

Comandos de controle (IX)

Repetição com for

for(inicialização;condição-limite;iteração){

Bloco;

}

32

Comandos de controle (X)

Exemplo de repetição com for

for(x=0,y=0;((x<100) && (y<=20));x++,y++){

for (int z=-5;z<10;z+=3)

System.out.println(z);

System.out.println(y);

}

33

Herança

public class Homem {

String nome, corOlhos;

int idade;

boolean casado;

public Homem( ) {

nome = “José”;

corOlhos = “azul”;

idade = 35;

casado = true;

}

}

public class Cachorro { String nome, corOlhos; int idade; boolean temRabo; public Cachorro( ) { nome = “Snoopy”; corOlhos = “marrom”; idade = 4; temRabo = true;

}

}

• Similaridades entre classes justificam o uso da herança

34

Herança public class Homem extends Mamifero{

boolean casado;

public Homem( ) {

nome = “José”;

corOlhos = “azul”;

idade = 35;

casado = true;

}

}

public class Cachorro extends Mamifero{ boolean temRabo; public Cachorro( ) { nome = “Snoopy”; idade = 4; temRabo = true;

}

}

public class Mamifero {

String nome, corOlhos;

int idade;

public Mamífero( ) {

nome = “nome”;

corOlhos = “marrom”;

idade = 0;

}

}

35

Herança - Construtores

public class Cachorro extends Mamifero{ boolean temRabo; public Cachorro( ) { //chamada automática e implícita ao construtor da classe //Mamífero. Repare que eu não preciso inicializar a cor dos //olhos do cahorro pois a mesma já foi feita na chamada do //construtor de sua superclasse.

nome = “Snoopy”; idade = 4; temRabo = true;

}

}

public class Mamifero {

String nome, corOlhos;

int idade;

public Mamífero( ) {

nome = “nome”;

corOlhos = “marrom”;

idade = 0;

}

}

• O primeiro comando dos construtores das subclasses é sempre a chamada ao construtor de sua superclasse.

36

Herança - Métodos

public class Homem extends Mamifero {

boolean casado;

public Homem( ) {

nome = “José”;

corOlhos = “azul”;

idade = 35;

casado = true;

}

public int InformarIdade( ) {

return idade;

}

}

public class Cachorro extends Mamifero { boolean temRabo; public Cachorro( ) { nome = “Snoopy”; idade = 4; temRabo = true;

}

public int InformarIdade( ) {

return idade;

}

}

37

Herança public class Homem extends Mamifero{

boolean casado;

public Homem( ) {

nome = “José”;

corOlhos = “azul”;

idade = 35;

casado = true;

}

}

public class Cachorro extends Mamifero{ boolean temRabo; public Cachorro( ) { nome = “Snoopy”; idade = 4; temRabo = true;

}

}

public class Mamifero {

String nome, corOlhos;

int idade;

public Mamífero( ) {

nome = “nome”;

corOlhos = “marrom”;

idade = 0;

}

public int InformaIdade() {

return idade;

}

}

38

Herança - Métodos

...

Cachorro filhote;

Homem dono;

Int idade;

filhote = new Cachorro();

dono = new Homem();

Idade = filhote.InformarIdade();

Idade = dono.InformarIdade();

...

//Métodos da superclasse

39

Herança - Métodos public class Homem extends Mamifero{ boolean casado; public Homem( ) { nome = “José”; corOlhos = “azul”; idade = 35; casado = true; } public fala( ) { JoptionPane.showMessageDialog(null,

“Olá!”); }}

public class Cachorro extends Mamifero{ boolean temRabo; public Cachorro( ) { nome = “Snoopy”; idade = 4; temRabo = true;

}

public fala( ) { JoptionPane.showMessageDialog(null, “Au-Au!”);

}

}

public class Mamifero {

String nome, corOlhos;

int idade;

public Mamífero( ) {

nome = “nome”;

corOlhos = “marrom”;

idade = 0;

}

public int InformaIdade() {

return idade;

}

}

40

Polimorfismo

...

Cachorro filhote;

Homem dono;

filhote = new Cachorro();

dono = new Homem();

filhote.fala();

dono.fala();

...

//Método da classe Cachorro

//Método da classe Homem

41

Herança – Métodos e Polimorfismo public class Homem extends Mamifero{

boolean casado; public Homem( ) { nome = “José”; corOlhos = “azul”; idade = 35; casado = true; } public fala( ) { JoptionPane.showMessageDialog(null,

“Olá!”); }}

public class Cachorro extends Mamifero{ boolean temRabo; public Cachorro( ) { nome = “Snoopy”; idade = 4; temRabo = true;

}

public fala( ) { JoptionPane.showMessageDialog(null, “Au-Au!”);

}

}

public class Mamifero {

String nome, corOlhos;

int idade;

public Mamífero( ) {

nome = “nome”;

corOlhos = “marrom”;

idade = 0;

}

public int InformaIdade() {

return idade;

}

public fala() {

JoptionPane.showMessageDialog(null, “...!”);

}

}

42

Polimorfismo

...

Cachorro filhote;

Homem dono;

Mamífero mamiferoDesconhecido;

filhote = new Cachorro();

dono = new Homem();

mamiferoDesconhecido = new Mamifero;

filhote.fala();

dono.fala();

mamiferoDesconhecido.fala()

...

//Método da classe Cachorro. Retorno?

//Método da classe Homem. Retorno?

//Método da classe Mamífero. Retorno?

43

HerançaClasses abstratas

public class Homem extends Mamifero{ boolean casado; public Homem( ) { nome = “José”; corOlhos = “azul”; idade = 35; casado = true; } public fala( ) { JoptionPane.showMessageDialog(null, “Olá!”); }}

public class Cachorro extends Mamifero{ boolean temRabo; public Cachorro( ) { nome = “Snoopy”; idade = 4; temRabo = true;

} public fala( ) { JoptionPane.showMessageDialog(null, “Au-Au!”); }}

abstract public class Mamifero {

String nome, corOlhos;

int idade;

public Mamífero( ) {

nome = “nome”;

corOlhos = “marrom”;

idade = 0;

}

abstract public fala(){

}

}

44

Polimorfismo

...

Cachorro filhote;

Homem dono;

Mamífero mamiferoDesconhecido;

filhote = new Cachorro();

dono = new Homem();

mamiferoDesconhecido = new Mamifero; //ERRO (classes abstratas não podem ser instanciadas!!!)

filhote.fala();

dono.fala();

...

//Método da classe Cachorro

//Método da classe Homem

45

“super”

Java possui uma palavra reservada utilizada para referenciar membros de superclasses a partir de objetos de sua subclasse

class Pai {

int valor = 1;

int umMetodo( ){

return valor;

}

}

class Filho extends Pai { int valor; //este valor é membro desta classe

int umMetodo( ){ //este método sobreescreve o método do pai

valor = super.valor + 1; //acesso a valores e métodos do pai

return super.umMetodo( ) + valor;

}

}

46

“super”

class Pai {

int valor = 1;

int umMetodo( ){

return valor;

}

}

class Filho extends Pai{ int valor; //este valor é membro desta classe

int umMetodo( ){ //este método sobreescreve o método do pai

valor = super.valor + 1; //acesso a valores e métodos do pai

return super.umMetodo( ) + valor;

}

}...int valorFilho, valorPai;

Pai meuPai = new Pai( );valorPai = meuPai.umMetodo( );

Filho meuFilho = new Filho ( );valorFilho = meuFilho.umMetodo( );...

Qual o valor de valorPai e

valorFilho ?

47

Herança Múltipla e Interfaces

Java não oferece suporte à Herança Múltipla.

No entanto, oferece um recurso – Interface – que permite simulá-la.

48

Coleções

Considere o seguinte exemplo:

Ao codificarmos estas classes, precisamos decidir como iremos implementar os relacionamentos em Java. Para isto, será necessário colocar novos atributos nas classes. Estes novos atributos são chamados de Atributos Implícitos.

A grande questão é como são implementados os relacionamentos n-ários. Uma primeira idéia é utilizarmos arrays para isto.

Alessandro Cerqueira

Departamento Empregado1 aloca 1..*

0..1 é gerenciado por 1SiglaNome

CPFNome

49

Coleçõesclass Departamento{ private: char Sigla[];

String Nome; Empregado EmpregadosAlocados[]; Empregado EmpregadoGerente;

public: Departamento(char[] _sigla, String _nome) {

Sigla = _sigla; Nome = _nome; EmpregadosAlocados = new Empregado[100]; }

...}

class Empregado{ private: char CPF[];

String Nome; Departamento AlocadoNoDepatamento;

public: Empregado(char[] _cpf, String _nome,

Departamento _depto) {

CPF = _cpf; Nome = _nome; AlocadoNoDepartamento = _depto }

...}

50

Coleções

A implementação de atributos n-ários com arrays não é adequada. Uma idéia melhor é utilizar a classe Vector. Arrays

Tamanho fixo e definido na criação do array. Procura pelo índice. Elementos do mesmo tipo. Arrays de tipos nativos e de instâncias de uma classe específica.

Vectors O tamanho inicial é definido quando o vector é criado. Este pode ser

modificado manualmente ou automaticamente. Procura pelo índice ou conteúdo. Elementos de qualquer classe. Vectors de instâncias de qualquer classe.

51

Coleções

class Departamento{ private: char Sigla[];

String Nome; Vector EmpregadosAlocados; Empregado EmpregadoGerente;

public: Departamento(char[] _sigla, String _nome) {

Sigla = _sigla; Nome = _nome; EmpregadosAlocados = new Vector(1,1); }

...}

class Empregado{ private: char CPF[];

String Nome; Departamento AlocadoNoDepatamento;

public: Empregado(char[] _cpf, String _nome,

Depatamento _depto) {

CPF = _cpf; Nome = _nome; AlocadoNoDepartamento = _depto }

...}

52

Coleções Alguns construtores e métodos importantes e úteis da classe Vector são:

Vector():Cria uma nova instância sem elementos e com capacidade inicial para 10 elementos.

Vector(int capacidade): Cria uma nova instância sem elementos e com capacidade inicial especificada pelo parâmetro.

addElement(Object elem): adiciona um objeto no final do Vector. insertElementAt(Object elem,int índice): adiciona um objeto na

posição especificada que deve estar entre 0 e o tamanho do Vector. setElementAt(Object elem,int índice): coloca o objeto em

determinada posição, removendo o objeto que estiver lá anteriormente. removeElement(Object elem): remove a primeira ocorência do objeto no

Vector. Retorna true caso tenha sido possível a remoção. removeElementAt(int índice): remove o objeto na posição

especificada. size(): retorna o número de objetos presentes no Vector.

53

Coleções

elementAt(int índice): Retorna o objeto presente na posição especificada.

firstElement(): Retorna o objeto presente na primeira posição. lastElement(): Retorna o objeto presente na última posição. indexOf(Object elem): retorna o índice da primeira ocorrência do

objeto no Vector ou -1 se o objeto não estiver presente. indexOf(Object elem,int índice): retorna o índice da primeira

ocorrência do objeto no Vector a partir da posição especificada. Retorna -1 se o objeto estiver presente.

lastIndexOf(Object elem): retorna o índice da última ocorrência do objeto no Vector ou -1 se o objeto não estiver presente.

lastIndexOf(Object elem,int índice): retorna o índice da última ocorrência do objeto no Vector a partir da posição especificada. Retorna -1 se o objeto estiver presente.

contains(Object elem): Informa se o objeto está presente no Vector.

54

Visibilidade

Para cada propriedade da classe (atributo ou método) é associado um tipo de visibilidade. Os modificadores de visibilidade indicam o nível de acesso ao método ou atributo. Private: a propriedade só pode ser utilizada dentro da classe. Sem modificador: a propriedade só pode ser utilizada nas classes do

mesmo pacote. Protected: a propriedade só pode ser utilizada nas classes do mesmo

pacote e em suas subclasses Public: a propriedade pode ser utilizada em qualquer classe.

Para que possamos implementar o encapsulamento conforme é proposto pelo modelo OO, os atributos devem ser declarados como private ou protected e seus métodos devem ser declarados como public.

55

Visibilidade

Como os atributos devem ser privados, é necessária a implementação de métodos que permitam o acesso de leitura e escrita a estes métodos.

Estes métodos são exemplos de Métodos Implícitos, uma vez que não devem aparecer na especificação de requisitos da classe. Os construtores também são exemplos de métodos implícitos.

56

Implementação de Pacotes

Em Java, cada arquivo pode conter várias classes, sendo que somente uma poderá ser public (e esta terá que ter o mesmo nome do arquivo). Cada arquivo pode pertencer somente a um pacote, mas um pacote pode conter vários arquivos. Para declarar o nome do pacote, deve-se utilizar a seguinte sintaxe na primeira linha de código do arquivo:

package MeuPacote; Pacotes podem ser vistos como bibliotecas de classes. Para

incluir classes de um pacotes em um arquivo, deve ser utilizada a seguinte sintaxe:

import MeuPacote.*; Pacotes são vistos pelo sistema operacional como diretórios.

57

Java.lang

Pacote default de Java (Não precisa de import) Além dos tipos básicos (não OO, ex. char, int, long,

float, double, etc.), Java implementa classes para tratamento OO de valores numéricos, lógicos e caracteres

São definidas as seguintes classes no pacote java.lang: Object, Math, Integer,Float, Character, Boolean, Long, Double, String, StringBuffer

58

Java.lang

Math Implementa uma biblioteca matemática

public final class Math extends Object Não pode ser derivada (final) Não pode ser instanciada (construtor private) Dados (constantes):

public final static double E = 2.71828...;public final static double PI = 3.14159..;

59

Java.lang

Métodos:

public static int abs (int) // long,float,doublepublic static double sqrt(double) **public static double pow(double,double) **public static double random()public static long round (double)

** throws ArithmeticException

60

Java.lang

Character Implementa métodos de teste e conversão

public final class Character extends Object

Pode ser instanciada. Métodos:

public Character (char)public static boolean isLowerCase(char)public static boolean isUpperCase(char)public static boolean isDigit(char)public static boolean isWhiteSpace(char)public static char toLowerCase(char)...public static String toString(char)

61

Java.lang

Integer Implementa métodos de conversão

public final class Integer extends Number

Pode ser instanciada. Dados (constantes): MIN_VALUE, MAX_VALUE Métodos:

public Integer (int) / (String)public static String toString(int) public static int parseInt(String)public static Integer valueOf(String)public int intValue() // long,float,doublepublic String toString()public static String toBinaryString (int)

62

Java.lang

Float Implementa métodos de teste e conversãopublic final class Float extends Number Pode ser instanciada. Dados: MIN_VALUE, MAX_VALUE, NEGATIVE_INFINITY, POSITIVE_INFINITY, NaN.

Métodos:public Float(float) // (double),(String)public boolean isNaN()public boolean isInfinite()public static Float valueOf(String)public float floatValue() //int,long,double

63

Java.lang

Long e Double Similares a Integer e Float

Booleanpublic final class Boolean extends Object Pode ser instanciada. Dados:

public final static Boolean FALSE, TRUE;

Métodos:public Boolean(boolean) // (String)public boolean booleanValue()

64

Java.lang

String e StringBuffer Implementam manipulação de cadeias de caracteres String é constante, StringBuffer variável

String Métodos:public String(String) / (char[])public int length()public char charAt(int)public int compareTo(String)public boolean equalsIgnoreCase(String)public boolean equals(Object)public String subString (int)

65

Java.lang

Diferença entre == e equals...String x = “abc”;String y = new String(“abc”);String z = “abc”;

if (x == y) System.out.println(“x==y”);else if (x.equals(y)) System.out.println(“x equals y”);if (x == z) System.out.println(“x==z”);...Imprimirá:x equals yx==z

66

Java.lang

StringBuffer Métodos:

public StringBuffer()public StringBuffer(int)public StringBuffer(String)public void setLength(int)public int capacity()public void setCharAt(int,char)public StringBuffer append(String)public StringBuffer append(char[])public StringBuffer insert(int,String)

Operador +:String s = “AB”+“CD”; // equivale a:String s = new StringBuffer(“AB”).append(“CD”).toString();

67

Exceções

Um grande número de possíveis condições de erro podem ser tratadas nos programas em Java como exceções.

Exceções comuns: . Divisão por zero (ArithmeticException) . Acesso a objeto não instanciado (NullPointerException) . Acesso a um índice inválido de array (ArrayIndexOutOfBoundsException) . Erro de acesso a dispositivo de E/S (IOException)

Exceções são classes derivadas da classe Exception

68

Exceções

class Teste { public static void main (String args[]) { int i=0; String frases[] = { “um”, “dois”, “tres” }; while (i<4) { // o indice vai de 0 a 2 ! System.out.println(frases[i]); i++; } }}

Provoca o erro:java.lang.ArrayIndexOutOfBoundsException: 3at Teste.main(Teste.java:6)

69

Exceções

Para tratar exceções usam-se as instruções try, catch e finally:

try { // codigo que possa gerar exececao} catch (Exception e) { // codigo para tratar ocorrencia da excecao} finally { // codigo executado caso a excecao ocorra ou não}

A cláusula finally é opcional, mas assegura a execução do código correspondente

Podem existir diversas cláusulas catch

70

Exceções

Exemplo;class Teste{ public static void main (String args[]) { int i=0; String frases[] = { “um”, “dois”, “tres” }; while (i<4) { // o indice vai de 0 a 2 ! try { System.out.println(frases[i]); } catch (ArrayIndexOutOfBoundsException e){ i = -1; } i++; } }}

71

Exceções

Podem ser tratadas novas exceções derivando-se a classe Exception

public class MinhaExcecao extends Exception { ...}

Para provocar a nova exceção usa-se: throw new MinhaExcecao();