Você está na página 1de 121

Mini-Curso de Java

Ministrante: Prof. Frank Siqueira


Transparncias: Prof. Roberto Pacheco
INE CTC - UFSC
INE 5612
A Linguagem JAVA
Viso Geral da Linguagem JAVA
Esse mini-curso
apresenta uma
Introduo ao
mundo complexo,
dinmico e
crescente da
linguagem JAVA.

Voc pode
conhecer o que
significa cada
mdulo no link:
http://java.sun.com/j2se/
Maior facilidade na programao;
Escreva uma vez, execute em qualquer lugar;
Elimina preocupaes comuns em outras linguagens
tais como ponteiros e gerenciamento de memria;
A sua natureza orientada a objetos ajuda na
visualizao do programa;
Portabilidade do cdigo;
Possibilidade de programas executarem mais de uma
tarefa (multithreading);
Verificao automtica de cdigo carregado para
garantir a segurana (ex: applets acessando disco);
Programao centrada na rede.
Princpios da Linguagem JAVA
Mquina imaginria que implementada pela sua
simulao em uma mquina real.
Fornece um conjunto de especificaes de plataforma de
hardware para qual todo o cdigo Java compilado;
Interpreta byte codes (que so independentes de
plataforma de hardware);
Pode ser implementada tanto na forma de software como
de hardware
Possui cdigo compacto;
Torna a linguagem JAVA portvel para diversas
plataformas.
Qualquer interpretador JAVA (seja para desenvolvimento
de tecnologia JAVA ou um browser que rode applets) tem
sua mquina virtual.
A Mquina Virtual JAVA
Conjunto de Instrues (equivalente a uma CPU)
Conjunto de registradores
Arquivos no formato class
Pilhas
Coletor de lixo
rea de memria
O que h na Mquina Virtual JAVA
O formato do cdigo da JVM se d por byte codes compactos e
eficientes. A maioria da checagem de tipo feita em tempo de
compilao.
Toda a alocao de memria exige a sua liberao;
Nas linguagens tradicionais a liberao de memria
dinmica da responsabilidade do programador;
Java fornece um sistema a nvel de thread para
registrar a alocao de memria;
Verifica e libera memria que no est sendo utilizada;
Para coletar a memria dinmica no utilizada a MVJ
utiliza uma thread de baixa prioridade na biblioteca
System (System.gc()). Ela pode tambm ser chamada
de forma explcita pelo programador.
Garbage Collection (Coletor de Lixo)
Viso Geral
Disco
Fase 1
Editor
O programa criado
no editor e
armazenado em disco.
Disco
Fase 2
Compilador
O compilador cria
bytecodes e os
armazena em disco.
Disco
Fase 3
Carregador
de Classes
O carregador de classe
coloca bytecodes na
memria.
Memria Principal
.
.
.
Fonte: Deitel & Deitel, 2003.
Viso Geral
Fase 4
Verificador de
bytecodes
O verificador de
bytecodes confirma que
todos os bytecodes so
vlidos e no violam
restries de segurana
do Java
Memria Principal
.
.
.
Fonte: Deitel & Deitel, 2003.
Intepretador
O interpretador l os
bytecodes e os traduz
para uma linguagem que
o computador pode
entender, possivelmente
armazenando valores dos
dados enquanto executa o
programa.
Memria Principal
.
.
.
Fase 5
Programando JAVA
Elementos da Programao Tradicional no Programa
// Nosso primeiro programa Java
// Conhecendo a estrutura de um programa Java
public class MeuPrimeiroPrograma {
public static void main (String arg[]) {
System.out.println("Ol Aluno de JAVA");
} // fim do mtodo main
} // fim da classe MeuPrimeiroPrograma

Funo Principal. Programas
em Linguagem C e C++ buscam
seu incio pela funo principal
(main()).
Parmetros. Parmetros em
funes permitem que essas
iniciem com valores recebidos
externamente, para variveis
que utilizaro internamente.
Programando JAVA
Elementos da Orientao a Objetos no Programa
// Nosso primeiro programa Java
// Conhecendo a estrutura de um programa Java
public class MeuPrimeiroPrograma {
public static void main (String arg[]) {
System.out.println("Ol Aluno de JAVA");
} // fim do mtodo main
} // fim da classe MeuPrimeiroPrograma
Classe. Como qualquer programa
JAVA, esse programa exige uma
classe (palavra reservada class).
O fato de ser pblica (palavra
public) garante visibilidade em
qualquer contexto de sua utilizao
Mtodo. A impresso da
mensagem Ol Aluno de
Java se deu pela execuo do
mtodo println da classe
System.
Objeto. Para imprimirmos a
mensagem de sada de nosso
programa precisamos de um objeto
out da classe System da
biblioteca padro java.lang
Biblioteca. A organizao das
classes JAVA se d na forma de
bibliotecas. Nesse programa utilizamos a
biblioteca padro da linguagem JAVA
(biblioteca java.lang)
Estrutura de um Programa JAVA

/** Nosso primeiro programa Java
Conhecendo a estrutura de um
programa Java */
public class MinhaClassePublica {


/** Comentrio sobre o mtodo */
public (private/protected) tipoRet
nomeMetodo(<parametros>) {
// cdigo do mtodo
} // fim da definio do mtodo
} // fim da classe
Comentrios. Com sintaxe // ... para
comentrios simples ou /* .... */ e a mais recente
/** .. */ que permite gerao de documentao
automtica (ferramenta javadoc)
import java.lang.*;
Import. Seo de importao de bibliotecas.
package meupacote; Package. Utilizado quando o cdigo do
programa dever fazer parte de um pacote.
Classes.
Declarao de
classes, atributos
e mtodos do
programa Java. A
declarao e a
definio dos
mtodos ocorre
obrigatoriamente
dentro do limite de
declarao da
classe.
Mtodo main(). Indica que a classe
Java um aplicativo que ser interpretado
pela mquina virtual.
Lembre-se.
// Comentrios:
Use comentrios para esclarecer conceitos
utilizados no programa. Utilize:
// para comentrios de linha nica
/* . */ para comentrios de vrias linhas
/** .*/ em ambos os casos e quando
desejar incluir o texto na
documentao de seu programa
(javadoc).
Sempre inicie seus programas com comentrio
descrevendo o propsito do mesmo.
public class MeuPrimeiroPrograma { .. }
Classes so tipos de dados declarados com a palavra
reservada class.
Cada arquivo .java deve ter somente uma classe pblica e
essa deve ter o mesmo nome do arquivo
Lembre-se.
public static void main (String args[]) {.}
O mtodo main() faz parte de todo aplicativo Java;
Deve estar entre os mtodos da classe pblica e ser
sempre por onde o aplicativo se inicia.
Os argumentos passados ao mtodo main() so uma lista
de objetos da classe String, separados por espaos em
branco.

System.out.println (parmetros) & System.out.print(....)
System.out o objeto de sada padro em Java
Permite exibir strings e outros tipos de informaes na
Janela de Comando (console do sistema operacional)
System.out.println() exibe seus parmetros e pula uma
linha

Compilando e Rodando o Programa
javac MeuPrimeiroPrograma.java
Compila o arquivo .java, gerando o arquivo .class, que
contm o bytecode da classe.

java MeuPrimeiroPrograma
Executa o programa Java

set CLASSPATH=C:\dir1;C:\dir2;.
Define os locais onde a JVM vai procurar por pacotes e
classes Java

start java MeuPrimeiroPrograma
Executa o programa Java em uma nova janela

Explorando o Programa JAVA
// Explorando nosso primeiro programa Java
// Para Trabalhar com Tela Grfica
// Pacotes de extenso Java
import javax.swing.JOptionPane;
public class MeuPrimeiroPrograma4 {
// o mtodo main inicia a execuo do aplicativo Java
public static void main (String arg[]) {
JOptionPane.showMessageDialog(null, "\nBem-Vindo\n Programao
Java\n\t\t por Janelas");
System.exit(0); // termina programa
} // fim do mtodo main
} // fim da classe MeuPrimeiroPrograma
Lembre-se.
import javax.swing.JOptionPane;
A Classe Java J OptionPane oferece caixas de dilogo predefinidas
que permitem aos programas exibir mensagens aos usurios;
As classes predefinidas da linguagem Java so agrupadas em
categorias de classes chamadas pacotes (package), conhecidos como
bibliotecas de classes Java ou interface de programao de aplicativos
Java (Java API)
Os nomes dos pacotes Java comeam com Java (pacotes do ncleo da
linguagem) ou Javax (extenses ao ncleo)
A instruo import utilizada para identificar e carregar classes
utilizadas em um programa Java. As classes importadas pertencem a
pacotes do ncleo, extenses oficiais ou extenses fornecidas por
terceiros.
As instrues import devem aparecer sempre antes da definio das
classes
JOptionPane uma classe da biblioteca de interfaces grficas do Java
Lembre-se.
JOptionPane.showMessageDialog(null, "\nBem-Vindo\n
Programao Java\n\t\t por Janelas");
O mtodo exibe dois argumentos (separados por vrgula, como se
faz em Java para todo mtodo de mltiplos argumentos);
O primeiro argumento null, significando vazio. O primeiro
argumento do mtodo showMessageDialog() utilizado para
posicionamento da janela. Ao ser null ignorado e a janela
apresentada no centro da tela.
A linha System.exit ( 0 ) necessria em programas com interface
grfica, terminando o aplicativo Java.
O retorno Zero (0) para o mtodo exit() indica que o programa
finalizou com sucesso. Valores diferentes de zero significam erros na
execuo e podem ser tratados por aplicativos que chamaram o
programa Java.
A classe System faz parte do pacote padro java.lang, que dispensa
a importao (comando import) por ser acrescida aos seus
programas por default
As Bibliotecas JAVA rt.jar & tools.jar
A Biblioteca (API Application Programming Interface)
formada por conjunto de classes do JDK;
Exemplos de pacotes Java:
java.lang: Tipos e funcionalidades bsicas da linguagem. Inclui,
entre outras, as classes String, Math, Integer e Thread.
importada automaticamente em seus programas Java;
java.awt: componentes grficos originais da linguagem (Abstract
Window Toolkit);
javax.swing: pacote de eXtenso aos componentes grficos com
melhoramentos biblioteca AWT
java.applet: classes especficas para tratamento de applets;
java.net: recursos de rede (sockets e URLs);
java.io: classes para escrita e leitura em arquivos;
java.util: classes para tarefas gerais, tais como vetores e string de
tokens.
O que h na Biblioteca Java?
Operadores Aritmticos
Java fornece, similar a outras linguagens, operadores aritmticos
de adio, subtrao, multiplicao, diviso e mdulo.

Operao de
Java
Operador
aritmtico
Expresso
algbrica
Expresso em
Java
Adio + f+7 f + 7
Substrao - p - c p - c
Multiplicao * bm b * m
Diviso / x/y ou xy x / y
Mdulo % r mod s r % s
Precedncia de Operadores Aritmticos
Java aplica os operadores em expresses aritmticas em uma
sequncia precisa determinada pelas regras de precedncia de
operadores, na seguinte ordem:
operadores em expresses contidas entre parnteses;
operaes de multiplicao, diviso e mdulo;
operaes de adio e de subtrao.
Operador(es) Operao (es) Ordem de avaliao (precedncia)
( ) Parnteses Avaliados primeiro. Se os parnteses esto aninhados, a
expresso no par mais interno avaliada primeiro. Se h vrios
pares de parnteses no mesmo nvel (ist , no aninhados),
eles so avaliados da esquerda para a direita.
*, / e % Multiplicao
Avaliados em segundo lugar. Se houver vrios operadores deste
tipo, eles so avaliados sa esquerda para a direita.
+ ou - Adio
Avaliados por ltimo. Se houver vrios operadores deste tipo,
eles so avalidos da esquerda para a direita.
Operadores de Igualdade e Relacionais
Todos os operadores relacionais tm o mesmo nvel de
precedncia e associam da esquerda para a direita;

Os operadores de igualdade tm o mesmo nvel de precedncia,
que mais baixo que a precedncia dos operadores relacionais.
Operador algbrico de
igualdade padro ou
operador relacional
Operador de igualdade ou
relacional em Java
Exemplo de
condio em Java
Significado da
condio em Java
Operadores de igualdade
= = = x = = y x igual a y
<> != x ! = y x no igual a y
Operadores relacionais
> > x > y x maior que y
< < x < y x menor que y
= >= x >= y
x maior que ou
igual a y
= <= x <= y
x menor que ou
igual a y
Precedncia e Associatividade
Java fornece um conjunto de operadores similar ao C e C++.
Entretanto, um erro bastante comum tentar utilizar o operador de
atribuio = como igualdade ==;

Todos os operadores, com exceo do operador de atribuio =,
associam da esquerda para a direita.
Operadores Associatividade Tipo
( ) da esquerda para a direita parnteses
* / % da esquerda para a direita de multiplicao
+ - da esquerda para a direita de adio
< <= > >= da esquerda para a direita relacional
== != da esquerda para a direita de igualdade
= da direita para a esquerda de atribuio
Operadores Aritmticos de Atribuio
Java fornece vrios operadores que abreviam as expresses de
atribuio;

A simplificao de sintaxe no a nica vantagem desses
operadores. Eles aumentam a velocidade de acesso s variveis
em programas.
Exemplo Exemplificao Atribui
c += 7 c = c + 7 10 a c
d -= 4 d = d - 4 1 a d
e *= 5 e = e * 5 20 a e
f /= 3 f = f / 3 2 a f
g %=9 g = g % 9 3 a g
Exemplos: int c = 3, d = 5, e = 4, f = 6, g = 12
Operador de
atribuio
+=
-=
*=
/=
%=
Operadores de Incremento e Decremento
Java possui operadores que acrescentam ou diminuem valores
unitrios em variveis. Seu funcionamento semelhante aplicao
do operador de atribuio com valor 1 (ou seja: x += 1;), mas permite
que o programador determine o momento em que deseja incrementar
(ou decrementar) sua varivel, com relao ao uso na expresso em
que essa varivel est inserida.
Chamado de Expresso exemplo Explicao
pr-incremento ++a
Incrementa 'a' por 1, depois utiliza o novo valor
de 'a' na expresso em que 'a' reside.
ps-incremento a++
Utiliza o valor atual de 'a' na expresso em que
'a' reside, depois incrementa 'a' por 1
pr-decremento --b
Decrementa 'b' por 1, depois utiliza o novo
valor de 'b' na expresso em que 'b' reside.
ps-decremento b--
Utiliza o valor atual de 'b' na expresso em que
'b' reside, depois decrementa 'b' por 1 --
Operador
++
++
--
Utilizando Nmeros - Adio
// Meu Segundo Programa JAVA
// Trabalhando com Nmeros e Operadores Aritmticos
// Baseado em Deitel & Deitel, 2003
// Pacote de extenso Java
import javax.swing.JOptionPane; // import class JOptionPane
public class Adicao {
public static void main( String args[] ) {
String primeiroNumero;// 1o string informado pelo usurio
String segundoNumero; // 2o string informado pelo usurio
int numero1; // primeiro operando da adio
int numero2; // segundo operando da adio
int soma; // Resultado da Adio
// ler o primeiro nmero (na forma string)
primeiroNumero = JOptionPane.showInputDialog("Digite o Primeiro No Inteiro" );
// ler o segundo nmero (na forma string)
segundoNumero = JOptionPane.showInputDialog( "Digite o Segundo No Inteiro" );
// convertendo os strings em nmeros inteiros
numero1 = Integer.parseInt(primeiroNumero);
numero2 = Integer.parseInt(segundoNumero);
// Somando os nmeros
soma = numero1 + numero2;
// Apresentando os resultados
JOptionPane.showMessageDialog(null, "A soma "+soma,"Resultado da Soma: ",
JOptionPane.PLAIN_MESSAGE);
System.exit( 0 ); // termina a aplicao
} // fim do mtodo main()
} // fim da classe Adicao
Lembre-se.
String primeiroNumero;

int numero1;
A declarao de variveis em Java segue a sintaxe
tipo nomeVariavel; ou
tipo nomeVariavel1, nomeVariavel2, ...;
tipo pode ser um dos tipos da linguagem Java ou uma classe
definida por seu programa Java.
Utilize preferencialmente letras minsculas e com nomes
significativos para o programa para declarar nomes de variveis ;
Os tipos de variveis da linguagem Java incluem inteiros (short,
int e long), nmeros reais (float ou double), caracteres (char),
tipo lgico (boolean) e varivel binria (byte)
Lembre-se.
primeiroNumero = JOptionPane.showInputDialog(Digite o primeiro Nmero
inteiro: );
O mtodo showInputDialog() combina a montagem da janela de
edio com o prompt de digitao do string fornecido pelo usurio.
Os argumentos passados ao mtodo showInputDialog() so vistos
sempre como Strings em seus programas Java.
No h em Java mtodo que faa para as entradas o que os
mtodos print() e println() fazem para as sadas de programas, ou
seja, tratamento de qualquer tipo da linguagem.
Por essa razo as variveis informadas aos programas Java so
sempre Strings que devem ser convertidas.
Erros de entradas inesperadas (tipos incompatveis com as
converses) devem ser tratados pelo usurio (veremos como em
tratamento de excees).
Lembre-se.
numero1 = Integer.parseInt (primeiroNumero);
O mtodo Integer.parseInt() converte um objeto String em um
tipo int.
A classe Integer est definida no pacote java.lang.
soma = numero1 + numero2;
A instruo combina o sinal de atribuio (=) com soma (+)
O programa Java segue a precedncia de operadores. No
exemplo, primeiro faz a adio e depois a atribuio do
resultado na varivel soma.
Para maior visibilidade no programa, utilize espaos para
separar operadores aritmticos
A soma + soma
O operador + nessa expresso de concatenao. Para faz-la, Java primeiro far
a converso da varivel soma em String e depois combinar o resultado em um
String maior contendo a primeira parte A soma acrescida do resultado da varivel
soma na forma de um string.
Comparando Nmeros - Comparao
Comparando Nmeros - Comparao
Lembre-se.
if (numero1 == numero2)
resultado = resultado + numero1 + == + numero2;
A estrutura if compara os valores das variveis numero1 e numero2 para
determinar sua igualdade de valores.
Caso numero1 e numero2 sejam iguais, a condio da estrutura if ser
verdadeira e o programa colocar na varivel resultado o string que
concatena as expresses na seguinte ordem:
Substring1: (resultado + numero1) ou seja: + valor de numero1
Substring2: ((resultado+numero1)+==) acresce ==
Substring3: ((resultado+numero1+==)+numero2) acresce valor de numero2
Final: resultado = Substring3



Utilizando Nmeros - Mdia
// Meu Segundo Programa JAVA
// Trabalhando com Nmeros e Operadores Aritmticos
// Baseado em Deitel & Deitel, 2003
// Pacote de extenso Java
import javax.swing.JOptionPane; // import class JOptionPane
public class Adicao {
public static void main( String args[] ) {
String primeiroNumero;// 1o string informado pelo usurio
String segundoNumero; // 2o string informado pelo usurio
int numero1; // primeiro operando da adio
int numero2; // segundo operando da adio
int media; // Resultado da Adio
// ler o primeiro nmero (na forma string)
primeiroNumero = JOptionPane.showInputDialog("Digite o Primeiro No Inteiro" );
// ler o segundo nmero (na forma string)
segundoNumero = JOptionPane.showInputDialog( "Digite o Segundo No Inteiro" );
// convertendo os strings em nmeros inteiros
numero1 = Integer.parseInt(primeiroNumero);
numero2 = Integer.parseInt(segundoNumero);
// Somando os nmeros
media = (numero1 + numero2)/2;
// Apresentando os resultados
JOptionPane.showMessageDialog(null, "A media "+media,"Resultado da media: ",
JOptionPane.PLAIN_MESSAGE);
System.exit( 0 ); // termina a aplicao
} // fim do mtodo main()
} // fim da classe Adicao
Palavras Reservadas em Java
abstract boolean break byte case
catch char class continue default
do double else extends false
final finally float for if
implements import instanceof int interface
long native new null package
private protected public return short
static super switch synchronized this
throw throws transient true try
void volatile while
Palavras-chave de Java
Como toda linguagem, Java possui identificadores reservados
para comandos que permitem a execuo de suas instrues

IMPORTANTE: voc no pode utilizar palavras-chave Java como
nome de variveis ou classes.
Tipos de dados primitivos em Java
Tipo Tamanho de bits Valores Padro
boolean 8 true ou false
char 16 \u0000 ' a ' \UFFFF'
(0 a 65535)
(conj. De caracteres
Unicode ISO)
byte 8 -128 a 127
('27 a 27 -1)
short 16
-32.768a+32.767
'(2
15
a 2
15
-1)
int 32
-2.147.483.648a+2.147.483.647
'(2
31
a 2
31
-1)
long 64
-9.223.372.036.854.775.808a
'+9.223.372.036.854.775.807
'(2
63
a 2
63
-1)
float 32
Intervalo Negativo:
-3.4028234663852886E+38 a
-1,40129846432481707E-45
Intervalo Positivo:
1,40129846432481707E-45 a
3,4028234663852886E+38
(ponto flutuante IEEE
754)
double 64
Intervalo Negativo:
-1,7976931348623157E+308 a
-4,94065645841246544E-324
Intervalo Positivo:
4,94065645841246544E-324 a
1,7976931348623157E+308
(ponto flutuante IEEE
754)
Estrutura de Seleo if
A estrutura if
Necessria sempre que os programas encontrarem seqncias
alternativas de aes, dependendo do valor de determinada
condio.
Exemplo:
Se a mdia das notas do aluno for maior ou igual a 6
Imprimir Aprovado
Sintaxe
if (condio)
comando Java;
[ou {bloco de comandos Java;}]
O Exemplo em Java
if (media >= 6)
System.out.println(Aprovado);
if (media >= 6) {
System.out.print(O Aluno est);
System.out.println(Aprovado);
} // fim do bloco if
Media >=6 Imprimir Aprovado
verdadeiro
falso
Estrutura de Seleo if/else
A estrutura if/else

Necessria sempre o programa deve executar uma ou mais aes quando uma
condio for verdadeira ou, quando essa for falsa, executar outra ao ou
seqncia de aes.

Exemplo:
Se a mdia das notas do aluno for maior ou igual a 6
Imprimir Aprovado
Seno
Imprimir Reprovado
Sintaxe

if (condio)
comando Java;
[ou {bloco de comandos Java;}]
else
comando Java;
[ou {bloco de comandos Java;}]

Estrutura de Seleo if/else
O Exemplo em Java
if (media >= 6){
System.out.print(O Aluno est);
System.out.println(Aprovado);
} // fim do bloco if
else {
System.out.print(O Aluno est);
System.out.println(Reprovado);
} // fim do bloco else
Media >=6 Imprimir Aprovado
verdadeiro
falso
Imprimir Reprovado
Operador Ternrio Condicional ?:
Sintaxe

(condio) ? {ao ou bloco verdade} : {ao ou bloco falso}

O Exemplo em Java
System.out.println(media >= 6 ? Aprovado : Reprovado);
Media >=6 Imprimir Aprovado
verdadeiro
falso
Imprimir Reprovado
Estruturas if/else Aninhadas
Seqncia de estruturas if/else
So utilizadas para o teste de mltiplos casos.

Exemplo:
Se a mdia das notas do aluno for maior ou igual a 9 conceito = A
Seno
Se a mdia das notas do aluno for maior ou igual a 7 conceito = B
Seno
Se a mdia das notas do aluno for maior ou igual a 6 conceito = C
Seno conceito = D

Estruturas if/else Aninhadas
Em Java
if (media >= 9)
System.out.print(O Conceito A);
else
if (media >= 7)
System.out.print(O Conceito B);
else
if (media >= 6)
System.out.print(O Conceito C);
else
System.out.print(O Conceito D);
Media >=9 A
verdadeiro
falso
Media >=7 B
verdadeiro
falso
Media >=6 C
verdadeiro
D
falso
Estrutura de Seleo Mltipla switch
switch/case
Utilizada em programas em que uma
varivel ou expresso pode assumir
diferentes valores e h uma ao (ou
bloco de aes) para cada valor
possvel.

Exemplo (organizando as aes de um
programa):

De acordo com a opo solicitada pelo
usurio:
caso 1: solicite a nota da prova do aluno
caso 2: solicite a nota do trabalho do aluno
caso 3: solicite a nota do projeto do aluno
caso 4: calcule a mdia final do aluno
default: encerre o programa
Utilize o comando break para no
acionar as aes nos blocos
definidos nos cases (e no
default) abaixo do case
acionado.
Estrutura switch/case
// programa exemplo de utilizao da estrutura switch/case
import javax.swing.JOptionPane;
public class SwitchCase {
public static void main(String arg[]) {
int notaProva = 0, notaTrab = 0, notaProj = 0;
float mediaFinal = 0;
String esc;
int escolha;
esc = JOptionPane.showInputDialog ("Digite sua Escolha : ");
escolha = Integer.parseInt(esc);
switch (escolha) {
case 1: notaProva= Integer.parseInt(JOptionPane.showInputDialog("Nota da Prova: "));
case 2: notaTrab = Integer.parseInt(JOptionPane.showInputDialog("Nota do Trabalho: "));
case 3: notaProj = Integer.parseInt(JOptionPane.showInputDialog("Nota do Projeto: "));
default: if(escolha<4) mediaFinal = (notaProva + notaTrab + notaProj)/(3-escolha+1);
}
JOptionPane.showMessageDialog(null,"Media Final: "+
mediaFinal,"Resultados",JOptionPane.INFORMATION_MESSAGE);
System.exit( 0 );
} // fim do main
} // fim da classe pblica
Estrutura de Repetio while
A estrutura de repetio while permite
especificar uma ao ou um bloco de aes que
devem permanecer sendo repetidas enquanto
determinada condio for verdadeira.
Exemplo:
Enquanto o usurio desejar continuar
calcule a mdia de cada aluno
O corpo da estrutura while pode ser uma
instruo nica ou um bloco de comandos.
Quando a condio do comando while se tornar
falsa, a ao (ou bloco) do comando ser
pulada. O programa continuar com a ao
imediatamente aps o comando while.
IMPORTANTE: voc deve sempre prever o
comando ou ao que tornar falsa a condio
do comando while. Caso contrrio seu
programa entrar em loop.
Estrutura while
// programa exemplo de utilizao da estrutura de repetio while
import javax.swing.JOptionPane;
public class SwitchCase {
public static void main(String arg[]) {
int notaProva = 0, notaTrab = 0, notaProj = 0;
float mediaFinal = 0;
String esc;
int escolha = 1;
while ((escolha >=1) && (escolha <=4)){
esc = JOptionPane.showInputDialog ("Digite sua Escolha : ");
escolha = Integer.parseInt(esc);
switch (escolha) {
case 1: notaProva= Integer.parseInt(JOptionPane.showInputDialog("Nota da Prova: "));
case 2: notaTrab = Integer.parseInt(JOptionPane.showInputDialog("Nota do Trabalho: "));
case 3: notaProj = Integer.parseInt(JOptionPane.showInputDialog("Nota do Projeto: "));
default: if(escolha<4) mediaFinal = (notaProva + notaTrab + notaProj)/(3-escolha+1);
}
JOptionPane.showMessageDialog(null,"Media Final: "+
mediaFinal,"Resultados",JOptionPane.INFORMATION_MESSAGE);
mediaFinal = notaProva = notaTrab = notaProj = 0;
} // fim do while
System.exit( 0 );
} // fim do main
} // fim da classe pblica
Problema
Uma turma de dez alunos se submeteu a um teste. As notas da prova so
valores inteiros no intervalo de 0 (zero) a 100 (cem). Prepare um programa
que calcule a mdia da turma (isto : some todas as notas e divida pelo total
de alunos que fizeram a prova).
Estrutura de Repetio while
Pseudocdigo - Algoritmo

Ajustar o total de alunos para zero;
Ajustar o contador de nota para um;

Enquanto o contador de nota for menor ou igual a 10
Ler prxima nota
Adicionar nota ao total

Atribuir mdia da turma o valor total divido por 10
Imprimir a mdia da turma
// Programa de mdia da turma com repetio controlada por contador
import javax.swing.JOptionPane;
public class MediaWhile {
//o mtodo main inicia a execuo do aplicativo Java
public static void main(String args[]) {
int total, // soma das notas digitadas pelo usurio
contadorNotas, // nmero de notas lidas
valorNota, // valor da nota digitada
media; // mdia de todas as notas
String nota; // nota digitada pelo usurio
// Fase de Inicializao
total = 0; // limpa varivel total
contadorNotas = 1; // prepara para executar lao
// Fase de Processamento
while (contadorNotas <= 10) {
// solicita entrada e l a nota digitada pelo usurio
nota = JOptionPane.showInputDialog("Entre com a nota - valor inteiro:");
// converte nota de String para inteiro
valorNota = Integer.parseInt(nota);
// adiciona a nota ao total
total += valorNota;
// adiciona 1 ao contador de notas
contadorNotas++;
} // fim do lao while
media = total/10; // executa diviso inteira
// exibe mdia das notas do teste
JOptionPane.showMessageDialog(null,"Mdia da Turma " + media,"Media turma",
JOptionPane.INFORMATION_MESSAGE);
System.exit( 0 );
} // fim do mtodo main
} // fim da classe MediaWhile
Estrutura de Repetio while
Estrutura de Repetio dowhile
A estrutura de repetio do/while permite repetir uma
ao ou um bloco de aes at que determinada
condio seja verdadeira. A diferena para a estrutura
while est no fato de que do/while inicia pela execuo
do bloco e somente aps a mesma analisa a condio.
Exemplo:
Faa
Obtenha as notas da turma
Calcula e Apresente a mdia
Enquanto houver mais turmas para calcular a mdia
O do/while sempre admite que a primeira interao
ocorre antes da confirmao da condio
O corpo da estrutura do/while pode ser uma instruo
nica ou um bloco de comandos.
Quando a condio do comando do/while se tornar
falsa, o programa continuar com a ao imediatamente
aps o comando do/while.
IMPORTANTE: voc deve sempre prever o comando ou
ao que tornar falsa a condio do comando
do/while. Caso contrrio seu programa entrar em
loop.
Continua
Obtm notas da turma
Sim
falso
Calcula e apresenta mdia
Estrutura de Repetio for
A estrutura de repetio for permite repetir uma ao ou um bloco de aes
com controle de contador ou da condio de permanncia no looping.
Exemplo:
Para o contador i de 1 a 10 faa
Obtenha a nota do i-simo aluno
some a nota do i-simo aluno ao total;
Calcule a mdia da turma como sendo o total divido por 10
O comando for tem trs sees de variveis:
for (inicializadores; condio de continuao; incrementos)
{
ao ou bloco de aes no comando;
}
int contador = 1
Verdadeiro
falso
Contador <=10
Instrues no corpo
do lao for.
contador++
Instrues break e continue
As instrues break e continue modificam o comportamento
das estruturas de repetio while, for, do/while ou switch. .
A instruo break interrompe o lao (no caso das estruturas de
repetio) e impede a execuo de outros casos de um
comando switch.
Exemplo:
Enquanto verdade permanente
(ex: x == 1, sem mudar x)
realize as operaes ..
se condio de fim for alcanada break;
Fim do Enquanto
A instruo continue permite o salto do conjunto de operaes,
com retorno expresso condicional do lao, reiniciando o
mesmo (portanto, ao contrrio do break, no interrompe o lao).
Normalmente break e continue interrompem laos em que
esto inseridos. Para interromper um conjunto aninhado de
estruturas, deve-se utilizar break e continue rotulados (com
denominao de blocos).
Problema
Faa um programa que apresente os nmeros pares entre zero e o nmero
inteiro digitado pelo usurio e que indique quantos nmeros mostrou.
Instruo continue Exemplo
Pseudocdigo - Algoritmo
Ajustar o total de pares para zero;
Ajustar o contador de pares para zero;
Ajuste o contador para zero;
Ler o nmero digitado pelo usurio
Faa
Se o contador/2 der resto zero
Adicione um ao contador de pares
Seno continue
Apresente o contador como nmero par
Enquanto (contador++ < nmero inteiro digitado pelo usurio)

// Programa que demonstra utilizao da instruo continue
import javax.swing.JOptionPane;
public class ContadorParesContinue {
public static void main (String args[]) {
String numeroInformado, saidaFinal = "";
int numero;
int contador = 0;
int pares = 0;
numeroInformado = JOptionPane.showInputDialog("Entre com um valor inteiro:");
numero = Integer.parseInt(numeroInformado);
do {
if ((contador % 2)!=0) // resto da diviso por dois no zero
continue;
pares++;
saidaFinal += contador + " ";
} while (++contador<numero);
saidaFinal += "\nTotal de pares: " + pares;
// exibe nmeros pares e total de pares
JOptionPane.showMessageDialog(null,saidaFinal);
System.exit(0);
} // fim do main()
} // fim da classe
Instruo continue Exemplo
// Programa que demonstra utilizao da instruo continue e
while
import javax.swing.JOptionPane;
public class ContadorParesContinueWhile {
public static void main (String args[]) {
String numeroInformado, saidaFinal = "";
int numero = 0, contador = -1, pares = 0;
numeroInformado = JOptionPane.showInputDialog("Entre com
um valor inteiro:");
numero = Integer.parseInt(numeroInformado);
while (++contador<numero) {
if ((contador % 2)!=0) // resto da diviso por dois no
zero
continue;
pares++;
saidaFinal += contador + " ";
}
saidaFinal += "\nTotal de pares: " + pares;
// exibe nmeros pares e total de pares
JOptionPane.showMessageDialog(null,saidaFinal);
System.exit(0);
} // fim do main()
} // fim da classe
Exerccio (while)
// Programa que demonstra utilizao da instruo continue e for
import javax.swing.JOptionPane;
public class ContadorParesContinueFor {
public static void main (String args[]) {
String numeroInformado, saidaFinal = "";
int numero = 0, pares = 0;
numeroInformado = JOptionPane.showInputDialog("Entre com
um valor inteiro:");
numero = Integer.parseInt(numeroInformado);
for (int contador=0; contador < numero; contador++) {
if ((contador % 2)!=0) // resto da diviso por dois no
zero
continue;
pares++;
saidaFinal += contador + " ";
}
saidaFinal += "\nTotal de pares: " + pares;
// exibe nmeros pares e total de pares
JOptionPane.showMessageDialog(null,saidaFinal);
System.exit(0);
} // fim do main()
} // fim da classe
Exerccio (for)
Mtodos
Mtodos so procedimentos de classe, onde esto
implementados os processos disponveis a objetos
(instncias) da classe.
Os mtodos permitem que objetos de uma classe
realizem tratamento de dados (normalmente atributos da
prpria classe), clculos, comunicao com outros
objetos e todo procedimento necessrio s aes das
instncias da classe.
Em Java, mtodos so funes de classes. Os
programas vistos at aqui no curso tinham a funo
main() como mtodo das respectivas classes pblicas
que deram nome aos nossos programas.

O que so Mtodos
Mtodos
A melhor forma de se construir programas est na
modularizao, ou seja, na diviso do sistema em
mdulos especficos.
Em Java os mdulos so descritos por mtodos e
classes, que podem ser:
Pr-empacotados: disponveis na Java API (bibliotecas de
classes Java).
Mtodos definidos pelo programador. Tarefas especficas
que podem ser utilizadas muitas vezes por um programa.
Um mtodo acionado (invocado) por uma chamada de
mtodo. Essa pode ser realizada por objetos da classe
do mtodo ou por chamadas classe (mtodos
estticos)
Mdulos: Pacotes de Classes+Mtodos
// programa exemplo de utilizao da estrutura de repetio while
import javax.swing.JOptionPane;
public class SwitchCase {
public static void main(String arg[]) {

case 1: notaProva= Integer.parseInt(JOptionPane.showInputDialog("Nota da Prova: "));

JOptionPane.showMessageDialog(null,"Media Final: "+
mediaFinal,"Resultados",JOptionPane.INFORMATION_MESSAGE);

System.exit( 0 );
} // fim do main
} // fim da classe pblica
Mtodos Exemplos conhecidos
API Java. Importao de classe
da API java.
Chamadas de Mtodo.
1. mtodo parseInt() da classe
Integer (pacote java.lang).
2. mtodo exit() da classe System
(pacote java.lang)
3. Mtodo showMessageDialog()
da classe JOptionPane (pacote
javax.swing)
Mtodos so chamados por seu nome, com a relao de argumentos colocada entre
parnteses. Quando os mtodos so estticos, o nome inclui o nome da classe.
Mtodos da Classe Math
Os mtodos da classe Math permitem realizar clculos
comuns necessrios em expresses matemticas.
Exemplos de chamadas de mtodos da classe Math:
Funo raiz quadrada: double y = Math.sqrt(10.0);
Funo mnimo. double z = Math.min(x,10);
Os mtodos da classe Math so mtodos estticos,
ou seja, no necessitam de objetos da classe para sua
chamada. Por essa razo voc deve precer as
chamadas dos mtodos com o nome da classe seguido
de ponto (como j fizemos nos programas anteriores):
JOptionPane.showMessageDialog()
System.exit( 0 );
Expresses Matemticas
Mtodos da Classe Math
Mtodos podem ser chamados em declaraes de variveis ou
como parmetros de outros mtodos
float z = sqrt(4.0*x);
System.out.println(Math.sqrt(x+y*f));
Chamada de Mtodos
Constantes
Programas Java podem definir constantes cujo valor inicializado na
declarao permanece imutvel. Para isso a declarao utilizada
final. A tentativa de alterao de varivel declarada como final
gera erro de sintaxe.
final float G = 9.81; // acelerao da gravidade;
A classe Math possui duas constantes importantes em programas
matemticos:
Math.E = 2.7282818284590452354
// valor base de logaritmos naturais
Math.PI = 3.14159265358979323846
// relao entre a circunferncia e o dimetro de crculos
Mtodo
abs( x )
ceil ( x )
cos( x )
exp( x )
floor( x )
log( x )
max( x, y )
min( x, y )
pow( x, y )
sin( x )
sqrt( x )
tan( x )
Exemplo
pow(2.0, 7.0) 128.0; pow(9.0,0.5) 3.0
sin(0.0) 0.0
sqrt(900.0) 30.0; sqrt(9.0) 3.0
tan(0.0) 0.0
tangente trigonomtrica de x (x em
radianos)
abs(23.7) 23.7; abs(0.0) 0.0; abs(-23.7) 23.7
ceil(9.2) 10.0; ceil (-9.8) -9.0;
cos(0.0) 1.0
exp(1.0) 2.718281828
floor(9.2) 9.0; floor(-9.8) -10.0
log(2.718282) 1.0; log(7.389056) 2.0
max( 2.3, 12.7) 12.7; max(-2.3;-12.7) -2.3
min( 2.3, 12.7) 2.3; min(-2.3;-12.7) -12.7
menor valor entre x e y (tambm em
verses para float, int e long)
x elevado potncia y (x
y
)
seno trigonomtrico de x (x em
radianos)
raiz quadrada de x
mtodo esponencial
e
x
arredonda o valor de x para o maior
inteiro no menor que x
logaritmo natural de x (base e)
maior valor entre x e y (tambm em
verses para float, int e long)
Descrio
valor absoluto de x (tem verses para
float, int e log)
arredonda o valor de x para o menor
inteiro no menor que x
co-seno trigonomtrico de x (x em
radianos)
Mtodos da Classe Math
Mtodos da Classe Math Exemplo
O jogo de Xadrez foi inventado na India (em data de difcil
preciso), por Lahur Sessa, que elaborou o jogo para compensar
a dor do Prncipe Ladava, que perdera seu filho em batalha por
seu reino. Desde ento, Ladava abandonara seus compromissos
e se restringia a repetir as estratgias da batalha vencida, para
entender porque seu filho morrera.
O jogo cativou o prncipe Ladava por sua engenhosidade e
ensinamentos. Desejoso de recompens-lo, o prncipe disse que
gostaria de recompensar Lahur pelo invento. Seu pedido foi que
recebesse o prmio em gros de trigo, sendo um gro para a
primeira casa do jogo, dois para a segunda, quatro para a terceira
e assim sucessivamente, at a sexagsima quarta casa.
Faa um programa em Java que calcule o total de gros de trigo
solicitados por Lahur e apresente o resultado nas seguintes
unidades:
Total de gros de trigo (R: 2
64
1 = 18 446 744 073 709 551
615)
Tempo de contagem do nmero de gros, dada uma contagem
a 5 gros por segundo (R: mil cento e setenta milhes de
sculos)
O trigo e o Xadrez
Baseado em O Homem que Calculava. Malba Tahan
// Programa que exemplifica o uso do mtodo Math.pow()
import javax.swing.JOptionPane;
public class XadrezTrigo {
public static void main (String args[]) {
String respostaFinal = "";
double totalGraos = Math.pow(2,64) - 1; // total de gros de trigo no tabuleiro
respostaFinal = "Total de Gros: " + Double.toString(totalGraos);
double tempoContagem = totalGraos/5.0; // tempo em segundos
respostaFinal += "\nTempo em segundos " + tempoContagem;
tempoContagem /= 60; // clculo em minutos
respostaFinal += "\nTempo em minutos " + tempoContagem;
tempoContagem /= 60; // clculo em horas
respostaFinal += "\nTempo em horas " + tempoContagem;
tempoContagem /= 24; // clculo em dias
respostaFinal += "\nTempo em dias " + tempoContagem;
tempoContagem /= 365; // clculo em anos
respostaFinal += "\nTempo em anos " + tempoContagem;
tempoContagem /= 100; // clculo em sculos
respostaFinal += "\nTempo em sculos " + tempoContagem;
System.out.println(respostaFinal);
JOptionPane.showMessageDialog(null,respostaFinal);
System.exit( 0 );
} // fim do main()
} // fim da classe
Mtodos da Classe Math Exemplo
Mtodos da Classe Math Exerccio
Em Corup-SC um produtor de Vitrias
Rgias supreendeu os botnicos com a
produo de uma planta de 2,60m de
dimetro. Essa planta suporta at 40Kg de
peso. Faa um programa Java que, a partir
do dimetro da planta informe o permetro
(medida da circunferncia da vitria rgia) e o
peso que ela suportar.
Defina uma constante para analisar a entrada
de dados (DIAMETRO MAXIMO = 3m).
Obs: para colocar o peso que a planta
suportar, utilize uma regra linear com base
na informao de que a planta de 2,6m
suporta at 40Kg.
Exerccio
Mtodos
Alm dos mtodos da API Java, o programador pode desenvolver os
mtodos para suas prprias classes.
Por exemplo: suponha uma classe ApresentaQuadrados que tem
por objetivo apresentar o quadrado da srie de nmeros pares entre
o nmero zero e um nmero digitado pelo usurio.
Pode-se criar a classe em Java por:
Criando Seus Prprios Mtodos
class public ApresentaQuadrados {
public static void main (String args[]) {
int numeroEntrada;
String respostaFinal = ;
// ler nmero digitado pelo usurio
// realizar lao de zero at o nmero digitado
// se o nmero na seqncia do lao for par,
// chamar o mtodo de calcular o valor ao quadrado
// guardar o valor resultante no String de resposta
// se no for, continue no lao
// apresentar a resposta final
}
static double calculaQuadrado (int x) {
return Math.pow(x,2);
} // fim do mtodo calculaQuadrados da classe ApresentaQuadrados
} // fim da classe ApresentaQuadrados
// Programa que exemplifica a criao de mtodos de Funo
import javax.swing.JOptionPane;
public class ApresentaQuadrados {
public static void main (String args[]) {
String numeroInformado, serieFinal = "", quadradoSerie = "";
int numero;
int numeroAtual = 0;
numeroInformado = JOptionPane.showInputDialog("Entre com um inteiro:");
numero = Integer.parseInt(numeroInformado);
do {
if ((numeroAtual % 2)!=0) // resto da diviso por dois no zero
continue;
serieFinal += Integer.toString(numeroAtual) + " ";
quadradoSerie += Double.toString(calculaQuadrado(numeroAtual)) + " ";
} while (++numeroAtual < numero);
// exibe nmeros pares e seus quadrados
JOptionPane.showMessageDialog(null,serieFinal+"\n"+quadradoSerie);
} // fim do main()
static double calculaQuadrado( double x) {
return Math.pow(x,2);
}
} // fim da classe
Mtodos
O mtodo calculaQuadrado() da classe ApresentaQuadrados chamado pelo mtodo main()
da mesma classe. Para cada nmero na srie de pares chama-se o mtodo da classe para o
clculo de seu quadrado (somente pelo nome, dado que o mtodo da prpria classe). O
resultado retornado funo main() e guardado no string de sada do sistema.
Arrays
Estruturas de dados, na forma de um grupo de posies
contguas na memria, com valores de mesmo nome e
mesmo tipo. Arrays so, portanto, a forma pela qual se
armazenam vetores de tipos.
Os arrays so estruturas estticas, isto , uma vez
criados mantm seu tamanho inicial. Para estruturas
dinmicas a Linguagem Java possui classes especiais
(classes Vector e Array)
Os elementos de um array so encontrados pela
referncia do nome do array e pelo nmero da posio
em que se encontra (tambm chamada ndice ou
subscrito).

O que so Arrays
Arrays
C [ 0 ] - 128
C [ 1 ] 8
C [ 2 ] 0
C [ 3 ] 82
C [ 4 ] 64
C [ 5 ] - 12
C [ 6 ] 65
C [ 7 ] 43
C [ 8 ] 76
C [ 9 ] 11
C [ 10 ] 0
Nome do array (todos os
elementos do vetor passam
a ter o mesmo nome: c)
Nmero da posio do
elemento dentro de um array
(ndice ou subscrito)
...
public static void main (String args[]) {
int c = new int[11];
...
c = {-128,8,0,82,64,-12,65,43,76,11};
// c[11] zero por default (inicializao)
...
c[4] += c[2]; // c[4] = 64 + 0 = 64
}

Arrays
Arrays em Java (como em C e C++) iniciam pela
posio zero. Portanto, um array c de trs
elementos tem as posies c[0], c[1] e
c[2].
Para se encontrar o elemento de um array se
usa o nome do array, seguido do subscrito (i.e.,
posio desejada), entre colchetes.
Os ndices ou subscritos so valores inteiros e
pode ser tratado como expresso de clculo
(lvalue). Por exemplo: c [ x + 2] = 3; se x
vale 6, o nono elemento do array (c[8])
receber o valor 3.
Nunca esquecer que
Arrays
Arrays em Java podem ter seu comprimento sempre
conhecido pela varivel lenght. Para determinar o
comprimento, basta usar o nome do array, seguido de
ponto e dessa varivel.
Arrays so manipulados em expresses diretas (e.g.,
c[2] = 4; ) por laos de repetio (e.g., para calcular
a soma do array, utilizar o comando for)
Erros comuns em programao Java (e em C/C++)
confundir o n-simo elemento do array com o subscrito
n. Por exemplo: o stimo elemento de um array c o
elemento c[6] e no o c[7] (que o oitavo)
Nunca esquecer que
Operadores Associatividade Tipo
( ) [ ] . da esquerda para a direita mais alto
++ -- da direita para a esquerda unrio ps-fixo
++ - + - ! (tipo) da direita para a esquerda unrio
* / % da esquerda para a direita multiplicativo
+ - da esquerda para a direita aditivo
< <= > >= da esquerda para a direita relacional
== != da esquerda para a direita igualdade
& da esquerda para a direita E lgico booleano
^ da esquerda para a direita OU lgico booleano exclusivo
I da esquerda para a direita OU lgico booleano inclusivo
&& da esquerda para a direita E lgico
II da esquerda para a direita OU Lgico
?: da direita para a esquerda condicional
= += -= *= /= %= da direita para a esquerda atribuio

Arrays
Precedncia e associatividade dos operadores
Arrays
Arrays so objetos que ocupam espaos contguos de memria. O
programador deve especificar o tipo, nome do array e utilizar o
operador new para reservar o espao necessrio.
int c[]; // declarao do array
c = new int[12]; // declarao e reserva de espao do do array
Arrays podem ser declarados e inicializados ao mesmo tempo:
int c[] = {1,2,3,4,5,6,7,8,9,10,11,12};
Nesse caso, a reserva de espao feita pelo operador new
automaticamente realizada pela mquina virtual Java.
Quando os arrays so declarados sem inicializao, o Java faz a
inicializao para zeros (variveis numricas), false (variveis lgicas
do tipo boolean) ou null para referncias a tipos de objetos.
Declarando Arrays
Arrays
Um programa Java pode declarar vrios arrays em uma
nica declarao.
int [] arrayA, arrayB, arrayC; // trs arrays de
inteiros
int arrayD = new int[121]; // criao de espao com
inicializao
String objTexto[] = new String [120], x[] = new
String[21];
// objTexto contm 120 objetos da classe String
// x contm 21 objetos da classe String
Arrays de tipos no primitivos (ex. Objetos da classe String)
guardam referncias a objetos em seus elementos. A
incializao de referncias null.
Declarao Mltipla de Arrays
Arrays
// ArrayInicializacao - criao de um array
// Baseado em Deitel e Deitel.
import javax.swing.*;
public class ArrayInicializacao {
// funo main
public static void main( String args[] ) {
int array[]; // declara a referncia a um array
array = new int[ 10 ]; // aloca dinamicamente o espao para o array
String saidaStr = "Subscrito\tValor\n"; // string alocado e inicializado
// adiciona cada valor dos elementos do array ao String de sada
for ( int contador = 0; contador < array.length; contador++ )
saidaStr += contador + "\t" + array[ contador ] + "\n";
JTextArea saidaArea = new JTextArea();
saidaArea.setText( saidaStr );
JOptionPane.showMessageDialog( null, saidaArea,
"Inicializando um Array de valores inteiros",
JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 );
}
}
Exemplo: programa de criao e apresentao dos
elementos do array (valores de inicializao automtica).
Arrays
Programas Java podem declarar e inicializar os
arrays por meio de chaves e valores, separados
por vrgulas.
int array[] = {10,20,30,40,50}; // array de 5 ints
Declaraes com inicializaes dispensam o
operador new porque o espao reservado
automaticamente pelo compilador.
No exemplo anterior, todos os elementos estavam
com zero. Refaa o programa para colocar valores
inteiros na declarao (e inicializao do array).
Utilizando uma lista de inicializadores para
inicializar os elementos de um array
Arrays
// ArrayInicializacao - criao de um array
// Baseado em Deitel e Deitel.
import javax.swing.*;
public class ArrayInicializacao2 {
// funo main
public static void main( String args[] ) {
// declarao com inicializao (dispensando operador new)
int array[] = {11,22,33,44,55,66,77,88,99,100};
String saidaStr = "Subscrito\tValor\n"; // string alocado e inicializado
// adiciona cada valor dos elementos do array ao String de sada
for ( int contador = 0; contador < array.length; contador++ )
saidaStr += contador + "\t" + array[ contador ] + "\n";
JTextArea saidaArea = new JTextArea();
saidaArea.setText( saidaStr );
JOptionPane.showMessageDialog( null, saidaArea,
"Inicializando um Array de valores inteiros",
JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 );
}
}
Exemplo: programa de criao e inicializao de array.
Arrays
O tamanho de arrays pode ser declarado
com o tipo final.
final int TAM_ARRAY = 10;
int array[TAM_ARRAY]; // array de 10 ints (incializados com
zeros)
Modifique o exemplo anterior para criao
de um array a partir do tamanho declarado
por constante, guardando no array uma
srie aritmtica de 2 e apresentando a srie
ao final do programa.
Calculando o valor a armazenar em cada
elemento de um array
Arrays
// ArraySerieAritmetica array para tratar sries
// Baseado em Deitel e Deitel.
import javax.swing.*;
public class ArrayInicializacao2 {
// funo main
public static void main( String args[] ) {
// declarao com inicializao (dispensando operador new)
final int TAM_ARRAY = 10;
int array[] = new int [TAM_ARRAY];
// calcula o valor para cada elemento do array
for ( int contador = 0; contador < array.length; contador++)
array[contador] = 2 + 2*contador;
String saidaStr = "Subscrito\tValor\n"; // string alocado e inicializado
// adiciona cada valor dos elementos do array ao String de sada
for ( int contador = 0; contador < array.length; contador++ )
saidaStr += contador + "\t" + array[ contador ] + "\n";
JTextArea saidaArea = new JTextArea();
saidaArea.setText( saidaStr );
JOptionPane.showMessageDialog( null, saidaArea,
"Inicializando um Array de valores inteiros",
JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 );
}
}
Arrays
Em muitos programas, os elementos de um array
representam sries de valores aos quais podem estar
associadas as necessidades de clculos.
Um exemplo: array contendo as notas de uma turma para a
qual deve ser calculada a mdia na prova.
Para realizar a soma ou qualquer outra operao
envolvendo os elementos de array, o programador Java de
utilizar comandos de laos e acesso aos elementos
desejados.
Exerccio: modifique o programa anterior para guardar os
elementos do array com as notas de 5 alunos de uma
turma, apresentando as notas digitadas e a mdia da
turma.
Somando os elementos de um array
Arrays
Em sries de valores numricos os programas podem
utilizar o recurso de Histograma para apresentar
visualmente os valores contidos em uma srie (ou array).
Em programas simples Java (quando no se utilizam
componentes de grficos), pode-se apresentar as sries
com caracteres como o *.
Para tal, basta associar sada dos nmeros do array a
apresentao da seqncia de caracteres especiais na
quantidade que representa essa freqncia..
Exemplo: programa que apresenta os elementos de um
array seguidos do caracter asterisco na quantidade de
inteiros igual ao valor do elemento do array.
Utilizando Histograma para apresentar os
elementos de um array
// Programa Histogram.java
// Apresentao de Histogramas.
// Baseado em Deitel e Deitel
import javax.swing.*;
public class Histograma {
public static void main( String args[] ) {
int array[] = { 19, 3, 15, 7, 11, 9, 13, 5, 17, 1 };
String saidaStr = "Elemento\tValor\tHistograma";
// para cada elemento do array, apresentar barra em histrograma
for ( int contador = 0; contador < array.length; contador++ ) {
saidaStr += "\n" + contador + "\t" + array[ contador ] + "\t";
// apresenta barra de asteriscos
for ( int estrelas = 0; estrelas < array[ contador ];
estrelas++ )
saidaStr += "*";
}
JTextArea outputArea = new JTextArea();
outputArea.setText( saidaStr );
JOptionPane.showMessageDialog( null, outputArea,
"Programa de Impresso de Histrogramas",
JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 );
}
}
Arrays
Arrays
Os elementos de um array podem guardar valores
que representam freqncias de ocorrncia de
determinados eventos.
Exemplo: programas de simulao em que se
guarda a freqncia de realizao de um
experimento ao qual se pode associar uma
distribuio de probalidades (e.g., lanamento de
um dado)
Exemplo: programa que realiza 6000 lanamentos
de um dado (usando o mtodo random() da classe
Math da API Java) e que ao final mostra os
resultados dos 6000 experimentos
Utilizando os elementos de um array como contadores
// Programa ArrayLancamentoDados - lanamento de 6000 vezes de um dado
// (C) Deitel & Deitel
import javax.swing.*;
public class ArrayLancamentoDados {
public static void main( String args[] ) {
int face, frequencia[] = new int[ 7 ];
// lana o dado 6000 vezes
for ( int lancamento = 1; lancamento <= 6000; lancamento++ ) {
face = 1 + ( int ) ( Math.random() * 6 );
// utilizando o valor da varivel face como subscrito do array
++frequencia[ face ];
}
String output = "Face\tFrequencia\tPercentual";
// Adiciona frequencias ao String de Sada
for ( face = 1; face < frequencia.length; face++ )
output += "\n" + face + "\t" + frequencia[ face ] + "\t" +
100*frequencia[face]/6000;
JTextArea outputArea = new JTextArea();
outputArea.setText( output );
JOptionPane.showMessageDialog( null, outputArea,
"Lanando um dado 6000 Vezes",
JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 );
}
}
Arrays
Arrays
Como de pde ver, quando os elementos de um
array representam uma srie de experimentos,
seus valores podem ser analisados para se
conhecer mais sobre a pesquisa que representam.
Exemplo: 40 estudantes da universidade
avaliaram a comida do Restaurante Universitrio,
em uma escala de 1 a 10 (pssimo a excelente).
Coloque as 40 respostas em um array de inteiros e
resuma o resultado da pesquisa
Utilizando arrays para analisar resultados de pesquisas
Arrays
// ArrayPesquisaEstudantes.java
// Pesquisa de opinio sobre o Restaurante Universitrio
// Deitel & Deitel
import javax.swing.*;
public class ArrayPesquisaEstudantes {
public static void main( String args[] ) {
int respostas[] = { 1, 2, 6, 4, 8, 5, 9, 7, 8, 10,
1, 6, 3, 8, 6, 10, 3, 8, 2, 7,
6, 5, 7, 6, 8, 6, 7, 5, 6, 6,
5, 6, 7, 5, 6, 4, 8, 6, 8, 10 };
int frequencia[] = new int[ 11 ];
// para cada resposta seleciona o valor de um elemento
// do array 'respostas' e usa aquele valor como subscrito do
// array 'frequencia' para determinar o elemento a incrementar
for ( int resp = 0; resp < respostas.length; resp++ )
++frequencia[ respostas[ resp ] ];
String saidaStr = "Grau\tFrequencia\n";
// adicionando frequencias ao String de saida
for ( int taxa = 1; taxa < frequencia.length; taxa++ )
saidaStr += taxa + "\t" + frequencia[ taxa ] + "\n";
JTextArea saidaArea = new JTextArea();
saidaArea.setText( saidaStr );
JOptionPane.showMessageDialog( null, saidaArea,
"Programa de Pesquisa dos Estudantes sobre RU",
JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 );
}
}
Arrays
Mtodos (ou funes) podem receber parmetros
tanto por chamada por valor como por chamada
por referncia.
Passagem por valor: o mtodo recebe uma cpia
do valor original e no alteram o valor original do
argumento passado ao mtodo.
Passagem por referncia o mtodo recebe a
localizao da varivel original e altera o prprio
argumento originalmente passado ao mtodo. H
um maior desempenho, pois elimina a
necessidade de cpias de valores.
Referncias e Parmetros por referncia
Arrays
Em Java o programador no pode decidir como
deseja trabalhar os parmetros dos mtodos. A
regra geral :
Tipos Primitivos: Passagem por cpia:
argumentos de tipos da linguagem so sempre
passados por cpia de valor e o return do mtodo
sempre retorna uma cpia de valor.
Objetos so passados por referncia objetos de
classes so sempre passados por referncia. Isso
significa que um objeto no passado para
mtodo e sim sua referncia. Isso significa que o
mtodo sempre manipula diretamente o objeto
Referncias e Parmetros por referncia
Arrays
int array[] = {1,2,3,4,5}
Passagem por cpia: deve-se passar o elemento
de determinada possio do array;
modificaElemento(array[3]);
Passagem por referncia: deve-se especificar o
nome do array sem nenhum colchetes.
modificaElemento(array);

Referncias e Parmetros por referncia
Arrays
// PassandoArray.java
// Passando arrays e elementos individuais de arrays para mtodos
// Deitel & Deitel
import javax.swing.*;
public class PassandoArray {
public static void main( String args[] ) {
JTextArea saidaArea = new JTextArea();
int array[] = { 1, 2, 3, 4, 5 };
String saida =
"Efeito da passagem de um array por referncia:\n" +
"Os valors originais do array so:\n";
// acrescenta os elementos do array original ao String saida
for ( int counter = 0; counter < array.length; counter++ )
saida += " " + array[ counter ];
modifyArray( array ); // array passado por referncia
saida += "\n\nOs valores modificados dos arrays so:\n";
// acrescenta os elementos do array modificado ao String saida
for ( int counter = 0; counter < array.length; counter++ )
saida += " " + array[ counter ];
saida += "\n\nEfeitos da passagem de elementos do array " +
"por valor:\n" +
"a[3] antes de modifyElement: " + array[ 3 ];

Arrays
// tentativa de modificar array[ 3 ]
modifyElement( array[ 3 ] );
saida += "\na[3] aps modifyElement: " + array[ 3 ];
saidaArea.setText( saida );

JOptionPane.showMessageDialog( null, saidaArea,
"Programa dos modelos de passagem de valores",
JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 );
} // fim do mtodo main

// multiplica cada elemento do array por 2
static void modifyArray(int array2[]) {
for ( int counter = 0; counter < array2.length; counter++ )
array2[ counter ] *= 2;
}

// multiplica o argumento (parmetro) por 2
static void modifyElement( int element ) {
element *= 2;
}
} // final da classe PassandoArray
Arrays
Permitem representar estruturas mais
complexas, tais como tabelas
(bidimensional) ou de maior ordem;
Para identificar um elemento especfico da
tabela devemos especificar dois ndices
(subscritos) - o primeiro identifica a linha e o
segundo a coluna (bidimensional);
Arrays Multidimensionais
Arrays
int array1[][] = { { 1, 2, 3 }, { 4, 5, 6 } };
int array2[][] = { { 1, 2 }, { 3 }, { 4, 5, 6 } };
int b[][];
b = new int[3][4];
String[][] desenhos = {
{ "Flintstones", "Fred", "Wilma", "Pebbles", "Dino" },
{ "Rubbles", "Barney", "Betty", "Bam Bam" },
{ "Jetsons", "George", "Jane", "Elroy", "Judy", "Rosie", "Astro" },
{ "Scooby Doo", "Scooby Doo", "Shaggy", "Velma", "Fred", "Daphne" }
};
Arrays Multidimensionais
Coluna 0 Coluna 1 Coluna 2 Coluna 3
Linha 0 a [0] [0] a [0] [1] a [0] [2] a [0] [3]
Linha 1 a [1] [0] a [1] [1] a [1] [2] a [1] [3]
Linha 2 a [2] [0] a [2] [1] a [2] [2] a [2] [3]
Nome do array
ndice da linha
ndice da coluna
Arrays
// ArrayMultiDim_1.java
// Inicializao de arrays multidimensionais
// Deitel & Deitel
import javax.swing.*;
public class ArrayMultiDim_1 {
static JTextArea saidaArea = new JTextArea();
public static void main( String args[] ) {

int array1[][] = { { 1, 2, 3 }, { 4, 5, 6 } };
int array2[][] = { { 1, 2 }, { 3 }, { 4, 5, 6 } };

saidaArea.setText( "Valores do 1. array\n" );
geraSaida( array1 );

saidaArea.append( "\nValores do 2. array\n" );
geraSaida( array2 );

JOptionPane.showMessageDialog( null, saidaArea,
"Array Multidimensional",JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 );

} // fim do mtodo main

Arrays
// acrescenta linhas e colunas de um array a saida
static void geraSaida( int array[][] ) {
// percore as linhas do array com um lao
for ( int linha = 0; linha < array.length; linha++ ) {
// percorre as colunas da linha atual com um lao
for ( int coluna = 0;
coluna < array[ linha ].length;
coluna++ )
saidaArea.append( array[ linha ][ coluna ] + " " );
saidaArea.append( "\n" );
}
}
}

} // fim da classe ArrayMultiDim_1
Arrays
Faca um programa que:
Crie um array bidimensional baseado em um
nmero informado pelo usurio;
Apresente esse array como uma matriz
identidade (x=y -> 1; x <> y -> 0). Na matriz
identidade todos os elementos da diagonal
principal so iguais a 1.
Exerccio
Classe Vector
Pode ser entendida como uma coleo de objetos
podendo variar de tamanho conforme a
necessidade;
Possui trs construtores:
public Vector(): constri um vetor vazio;
public Vector(int initialCapacity):
constri um vetor vazio com a capacidade
especificada;
public Vector(int initialCapacity, int
capacityIncrement): constri um vetor vazio
com a capacidade e incremento especificados.
Classe Vector
Principais mtodos:
public int size();
public boolean contains(Object elem);
public int indexOf(Object elem);
public synchronized Object elementAt(int index);
public synchronized void setElementAt(Object obj,
int index);
public synchronized void removeElementAt(int
index);
public synchronized void addElement(Object obj);
public synchronized void insertElementAt(Object
obj, int index).
Classe Vector - Exemplo
import java.util.*;

public class ExemploVector {

private Vector vetor = null;

public ExemploVector() {
vetor = new Vector(1,1); //Define a capacidade e incremento
}

public void addInt(int i) {
vetor.addElement(new Integer(i));
}

public void addDouble(double d) {
vetor.addElement(new Double(d));
}

...
}
API Java. Importao de classe
da API java.util.*;
Aqui est includa a classe
Vector()
Utiliza o construtor que permite
definir o tamanho inicial do
vetor e o incremento
O mtodo addElement(Object)
permite adicionar qualquer
objeto para um determinado
vetor.
Classe Vector - Exemplo
import java.util.*;

public class ExemploVector {
....
public static void main (String par[]) {
ExemploVector v = new ExemploVector();
int intValor = 5;
double dblValor = 5.45;
char chrArray[] = {'1','2','3','4','5'};
String strValor = new String("Java");
Conta nCta = new Conta(111,35458,1,150.23,100);

//Adiciona elementos ao vetor
v.addInt(intValor);
v.addDouble(dblValor);
v.addString(strValor);
v.addCharArray(chrArray);
v.addConta(nCta);
v.imprimeVetor();
}
....
}
Chama os diversos mtodos da
classe ExemploVector para
adicionar diferentes elementos
para o vetor
Classe Vector - Exemplo
import java.util.*;

public class ExemploVector {
....
}
class Conta {
private int agencia, conta, digito;
private static double saldo, limite;

public Conta(int pagencia, int pconta, int pdigito, double
psaldo, double plimite) {
agencia = pagencia;
conta = pconta;
digito = pdigito;
saldo = psaldo;
limite = plimite;
}
public void imprime() {
System.out.println("Agencia: "+agencia+" Conta: "+conta+"-
"+digito+" Saldo: "+saldo);
}
}
Define uma classe Conta no
mesmo arquivo
ExemploVector.java
Construtor da classse
Mtodo imprime da classe
Conta
Classe Vector - Exemplo
import java.util.*;

public class ExemploVector {
....
public void imprimeVetor() {
Object obj;
int tamanho = vetor.size();
System.out.println("O nmero de elementos do vetor
"+vetor.size());
for (int i = 0; i < vetor.size(); i++) {
obj = vetor.elementAt(i);
if (obj instanceof char[]) {
System.out.println(String.copyValueOf((char[]) obj));
} else if (obj instanceof Conta) {
Conta cta = (Conta)obj;
cta.imprime();
} else { System.out.println(obj.toString()); }
}
}
....
}
Percorre todo o vetor utilizando
o mtodo size()
O comando instanceof permite
descobrir o tipo de determinado objeto
Para acessar os mtodos de
determinado objeto que est no array
preciso realiza um type cast
utilizando o nome da classe entre ()
Recupera um elemento
especfico do vetor atravs do
mtodo elementAt(int)
Orientao a Objetos - Herana
Superclasse: classe pai que fornece atributos e
comportamento para outras classes;
Subclasse: referem-se a especializaes de determinada
classe projetando uma nova verso do modelo original.
class Pessoa {
private int id;
private String nome, endereco;
private int idade;
//mtodos
}

class Paciente {
private int id;
private String nome, endereco;
private int idade;
private String documento;
//mtodos
}
class Pessoa {
private int id;
private String nome, endereco;
private int idade;
//mtodos
}

class Paciente extends Pessoa {
private String documento;
//mtodos herdados
//mtodos da classe Paciente
}
extends a
palavra
reservada que
indica que uma
classe
(subclasse)
est herdando
as
caractersticas
de outra classe
(superclasse)
Pessoa
Paciente Mdico Atendente
public class Pessoa {
private int id;
private String nome, endereco;
private int idade;
//Mtodos de atribuio
public void setId(int pId) {
id = pId;
}
public void setNome(String pNome) {
nome = pNome;
}
public void setEndereco(String pEndereco) {
endereco = pEndereco;
}
public void setIdade(int pIdade) {
idade = pIdade;
}
//Mtodos de recuperao
public int getId() {
return id;
}
public String getNome() {
return nome;
}
public String getEndereco() {
return endereco;
}
public int getIdade() {
return idade;
}
}
Exemplo Classe Pessoa
Classe Pessoa
Mtodos de
atribuio
de
informao
set...()
Mtodos de
recuperao de
informao
get...()
Encapsulamento:
Todos os atributos
da classe Pessoa
so definidos como
privados private e
somente podem ser
acessados atravs
de mtodos pblicos
puclic.
Atributos
public class Paciente extends Pessoa {

//Atributos
private String documento;

//Construtor
public Paciente(int pCodigo, String pNome, String pEndereco,
int pIdade, String pDocumento) {
setId(pCodigo);
setNome(pNome);
setEndereco(pEndereco);
setIdade(pIdade);
documento = pDocumento;
}

//Mtodos de atribuio
public void setDocumento(String pDocumento) {
documento = pDocumento;
}

//Mtodos de recuperao
public String getDocumento() {
return documento;
}
}
Exemplo Classe Paciente
Classe Paciente
Construtor da classe
Paciente com cinco
argumentos
Mtodos de
atribuio
de
informao
set...()
Mtodos de
recuperao de
informao
get...()
Encapsulamento:
Todos os atributos
da classe Paciente
so definidos como
privados private e
somente podem ser
acessados atravs
de mtodos pblicos
public.
import java.util.*;
public class ControlePaciente {
private Vector listaPaciente = new Vector();

public void inserePaciente(int pId, String pNome,
String pEndereco, int pIdade, String pDocumento) {
Paciente paciente =
new Paciente(pId, pNome, pEndereco, pIdade, pDocumento);
listaPaciente.add(paciente);
}

//Mtodo utilizado para imprimir a lista de Pacientes
public String imprimePacientes() {
String result = "";
for (int intIdx = 0; intIdx < listaPaciente.size(); intIdx++) {
result += "Cdigo: " +
((Paciente)listaPaciente.elementAt(intIdx )).getId()+
" Nome: " +
((Paciente)listaPaciente.elementAt(intIdx )).getNome()+
" Idade: " +
((Paciente)listaPaciente.elementAt(intIdx )).getIdade()+
" Documento: " +
((Paciente)listaPaciente.elementAt(intIdx )).getDocumento()+
"\n";
}
return result;
}
....
Exemplo Classe ControlePaciente
Classe ControlePaciente
Cria o objeto paciente (instncia da
classe Paciente) utilizando o construtor
que recebe parmetros

...
//Mtodo utilizado para imprimir um determinado Paciente
public String imprimePaciente(int pId) {
for (int intIdx = 0; intIdx < listaPaciente.size(); intIdx++) {
if (((Paciente)listaPaciente.elementAt(intIdx)).getId() == pId) {
return "Cdigo: " +
((Paciente)listaPaciente.elementAt(intIdx )).getId()+
" Nome: " +
((Paciente)listaPaciente.elementAt(intIdx )).getNome()+
" Idade: " +
((Paciente)listaPaciente.elementAt(intIdx )).getIdade()+
" Documento: " +
((Paciente)listaPaciente.elementAt(intIdx )).getDocumento()+
"\n";
}
}
}
}



Classe ControlePaciente
Exemplo Classe ControlePaciente
import javax.swing.*;

public class LimiteCadPaciente {

private ControlePaciente ctrPac = new ControlePaciente();

public void capturaDados() {
ctrPac.inserePaciente(1, "Jos da Silva", "Endereo 1", 55,
"298982828");
ctrPac.inserePaciente(2, "Fulano de Tal", "Endereo 2", 18,
"099889828");
ctrPac.inserePaciente(3, "Alexandre Silveira", "Endereo 3", 35,
"327489938");
}

public void imprimePacientes() {
System.out.println(ctrPac.imprimePacientes());
}

public void imprimePaciente(int pId) {
System.out.println(ctrPac.imprimePaciente(pId));
}

public static void main (String par[]) {
LimiteCadPaciente limPac = new LimiteCadPaciente();
limPac.capturaDados();
limPac.imprimePacientes();
System.out.println("-------------------");
limPac.imprimePaciente(2);
}
}
Classe LimiteCadPaciente
Chama os mtodos
da classe
ControlePaciente
atravs do objeto
ctrPac
Cria o objeto ctrPac (instncia
da classe ControlePaciente)
Exemplo Classe LimiteCadPaciente
import javax.swing.*;

public class LimiteCadPacienteI {

public static void main (String par[]) {

int escolha = 0;

//Varivel utilizada para recuperar as informaes da interface
//do usurio
int id = 0;
String nome = "", endereco = "", documento = "";
int idade = 0;

//Instancia o Controlador
ControlePaciente ctrPac = new ControlePaciente();

do {
do {
escolha = Integer.parseInt(
JOptionPane.showInputDialog("Escolha uma opo do
menu:\n"+
"[1] Adiciona Pacientes\n"+
"[2] Altera Pacientes\n"+
"[3] Finaliza"));
} while ((escolha < 1) || (escolha > 3));

if (escolha == 3) System.exit(0);
....
Classe LimiteCadPaciente Cria o objeto ctrPac (instncia
da classe ControlePaciente)
Exemplo Classe LimiteCadPaciente
Exemplo Classe LimiteCadPaciente
....
switch (escolha) {
case 1:
//Requisita o Cdigo
id = Integer.parseInt(
JOptionPane.showInputDialog ("Informe o cdigo"));
//Requisita o Nome
nome = JOptionPane.showInputDialog ("Informe o nome");
//Requisita o Endereco
endereco = JOptionPane.showInputDialog ("Informe o endereo");
//Requisita a Idade
idade = Integer.parseInt(
JOptionPane.showInputDialog ("Informe a idade"));
//Requisita o Documento
documento = JOptionPane.showInputDialog ("Informe o documento");
//Adiciona o objeto para a lista de pacientes
ctrPac.inserePaciente(id, nome, endereco, idade, documento);
break;
case 2:
JOptionPane.showMessageDialog(null,
ctrPac.imprimePacientes(),
"Relao de Pacientes",
JOptionPane.INFORMATION_MESSAGE);
}
} while (true);
}
}
Classe LimiteCadPaciente
Chama os mtodos
da classe
ControlePaciente
atravs do objeto
ctrPac
Exerccio I Limite (Classe LimiteCadPacienteI) Exemplo Classe LimiteCadPaciente
Tratamento de Excees
A exceo uma indicao de que ocorreu um problema
durante a execuo do programa;
uma condio anormal que surge em uma seqncia de
cdigo ou operao realizada em tempo de execuo;
Essa caracterstica permite escrever programas mais
claros, mais robustos e tolerantes a falhas;
Pode ocorrer quando:
for realizada um tentativa de abrir um arquivo que no
existe;
uma conexo com a rede for interrompida;
ocorrer manipulao de estruturas fora de um intervalo;
problemas com um banco de dados.


Tratamento de Excees (try e catch)
Utilizada para definir um conjunto de cdigo que deve ser
protegido e tratado atravs de blocos catch;
Podem existir vrias declaraes catch.

try {
//bloco de cdigo
} catch (TipoDeExceo refernciaParaExceo) {
//cdigo a ser executado caso a exceo geral seja disparada
}

O bloco try pode ser seguido por zero ou mais blocos
catch;
Se um bloco try executado e nenhuma exceo
disparada, todos os tratadores de excees so
desconsiderados e o controle retomado na primeira
instruo aps a finalizao do bloco.

Tratamento de Excees (finally)
Para programas que obtm certos tipos de recursos estes
devem devolver explicitamente esses recursos para evitar
perda de performance (ex: criao de uma conexo com
um banco de dados);
O bloco finally sempre ir executar o cdigo associado.
Isso garantido pelo Java;

try {
//bloco de cdigo
} catch (TipoDeExceo refernciaParaExceo) {
//cdigo a ser executado caso a exceo geral seja disparada
} finally {
//cdigo a ser executado independente da exceo
}


Tratamento de Excees - Categorias
Error: indica um problema grave e as vezes
impossvel de ser tratado;
RuntimeException: indicam problemas decorrentes
de projeto ou implementao. Uma exceo
bastante comum ArrayIndexOfBoundsException
disparada porque o ndice excede o limite de um
array ou vetor;
Excees causadas em tempo de execuo pelo
ambiente mas que podem ser tratadas;
Uma lista mais completa das excees pode ser
encontrada na pgina 753 do livro do Deitel &
Deitel.
Capturando uma Exceo
Os tratadores de exceo esto contidos em
blocos catch;
Cada bloco catch inicia com a palavra-chave catch
seguida por parnteses que contm um nome de
classe (especifica o tipo de exceo a ser
capturado) e um nome de parmetro;
O tratador de exceo pode fazer referncia ao
objeto disparado atravs desse parmetro;
Aps a chave pode-se descrever o cdigo que ir
tratar a exceo.
Capturando uma Exceo
import java.util.*;

public class ExemploException1 {

private Vector v = new Vector();

public ExemploException1() {
v.add("Disciplina 1");
v.add("Disciplina 2");
imprimeVetor();
}

public void imprimeVetor() {
System.out.println("O nmero de elementos do vetor "+v.size());
for (int i = 0; i <= v.size(); i++) {
System.out.println(v.elementAt(i).toString());
}
}

public static void main (String par[]) {
ExemploException1 exemploExc = new ExemploException1();
}
}
Ir produzir a exceo
ArrayIndexOutOfBoundsException
Capturando uma Exceo try/catch
import java.util.*;

public class ExemploException1 {

private Vector v = new Vector();

public ExemploException1() {
v.add("Disciplina 1");
v.add("Disciplina 2");
imprimeVetor();
}

public void imprimeVetor() {
System.out.println("O nmero de elementos do vetor "+v.size());
try {
for (int i = 0; i <= v.size(); i++) {
System.out.println(v.elementAt(i).toString());
}
} catch (ArrayIndexOutOfBoundsException exc) {
System.out.println("ndice fora do limite");
}
}

public static void main (String par[]) {
ExemploException1 exemploExc = new ExemploException1();
}
}
A exceo
ArrayIndexOutOfBoundsException
ser capturada no bloco try/catch
Capturando uma Exceo - finally
import java.util.*;

public class ExemploException1 {

private Vector v = new Vector();

public ExemploException1() {
v.add("Disciplina 1");
v.add("Disciplina 2");
imprimeVetor();
}

public void imprimeVetor() {
System.out.println("O nmero de elementos do vetor "+v.size());
try {
for (int i = 0; i <= v.size(); i++) {
System.out.println(v.elementAt(i).toString());
}
} catch (ArrayIndexOutOfBoundsException exc) {
System.out.println("ndice fora do limite -> "+exc.getMessage());
} finally {
System.out.println("Processo finalizado");
}
}

public static void main (String par[]) {
ExemploException1 exemploExc = new ExemploException1();
}
}
A exceo
ArrayIndexOutOfBoundsException
ser capturada no bloco try/catch e o
bloco finally sempre ser executado.
Atravs do objeto exc (instncia de
ArrayIndexOutOfBoundsException)
possivel recuperar maiores detalhes do
erro (mtodo getMessage()).
Propagando uma Exceo - throws
Permite que a exceo gerada em determinado
mtodo seja propagada para bloco de cdigo
chamador.

public void metodo() throws ExcecaoGeral {
//cdigo
}
public void metodoChamador() {
try {
//cdigo
} catch (TipoDeExceo refernciaParaExceo) { ... }
} finally { //cdigo }
}

Propagando uma Exceo - throws
import java.util.*;

public class ExemploThrows {

private Vector v = new Vector();

public ExemploThrows() throws Exception {
v.add("Disciplina 1");
v.add("Disciplina 2");
imprimeVetor();
}

public void imprimeVetor() throws Exception {
System.out.println("O nmero de elementos do vetor "+v.size());
for (int i = 0; i <= v.size(); i++) {
System.out.println(v.elementAt(i).toString());
}
}

public static void main (String par[]) {
try {
ExemploThrows explthrows = new ExemploThrows();
} catch (Exception exc) {
System.out.println("Erro "+exc.getMessage());
} finally {
System.out.println("Processo finalizado");
}
}
}
Propagao da exceo (throws)
Tratamento da exceo
Disparando uma Exceo - throw
Uma exceo tambm pode ser disparada atravs da
instruo throw;
A instruo throw utilizada explicitamente para lanar
uma exceo provocando a interrupo do fluxo de
execuo;
O TipoDeExceo pode ser de qualquer classe Throwable
(pacote java.lang);
As duas subclasses imediatas so Exception e Error;
O bloco catch analisado para verificar a existncia da
exceo disparada;
Caso no exista uma declarao idntica, a prxima
declarao executada seguindo uma hierarquia. Se a
classe pai no for encontrada um erro de compilao
gerado.
Disparando uma Exceo - throw
import java.util.*;

public class ExemploThrow {
private Vector v = new Vector();
public ExemploThrow() throws Exception {
v.add("Disciplina 1");
v.add("Disciplina 2");
imprimeVetor();
}

public void imprimeVetor() throws Exception {
System.out.println("O nmero de elementos do vetor "+v.size());
try {
for (int i = 0; i <= v.size(); i++) {
System.out.println(v.elementAt(i).toString());
}
} catch (ArrayIndexOutOfBoundsException exc) {
throw new Exception("ndice fora do limite -> "+exc.getMessage());
} finally {
System.out.println("Processo finalizado");
}
}

public static void main (String par[]) {
try {
ExemploThrow explthrow = new ExemploThrow();
} catch (Exception exc) {
System.out.println(exc.getMessage());
}
}
}
A exceo
ArrayIndexOutOfBoundsException
captura e propagada atravs do
comando throw.
Tarefa
Academia
Crie um sistema para
gerenciamento de uma
academia de ginstica
Defina a classe que
representa os alunos com
os atributos relevantes
Crie uma classe com
mtodos para inserir, listar
e excluir alunos do cadastro
e para fazer o pagamento
de mensalidades
Crie a classe que faz a
interao com o usurio

Você também pode gostar