renata araujo projeto e construção de sistemas com ambientes de programação unirio 2002.1...
TRANSCRIPT
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();