Escolar Documentos
Profissional Documentos
Cultura Documentos
1. Introduo
9
10
13
14
15
18
20
38
2. Programando em Java
41
2.1. Aplicativos
2.2. Variveis de Memria
2.3. Declarao de variveis
2.4. Comentrios
2.5. Sequncias de Escape
42
47
50
56
57
2
2.6. Operadores
2.6.1. Operador Atribuio
2.6.2. Operadores Aritmticos
2.6.3. Operadores Relacionais
2.6.4. Operadores Lgicos
2.6.5. Operador de Concatenao
2.7. Mtodo
2.7.1. Mtodos criados pelo programador
2.8. Atributo
2.9. Classe e Objeto
2.10. Herana
2.10.1. Herana e Converso de Tipos
2.11. Polimorfismo
2.11.1. @Override
2.12. Pacote
2.12.1. Criando e Utilizando um Pacote
2.13. Modificadores
2.13.1 Modificadores de Classe
2.13.2 Modificadores de Mtodo
2.13.2 Modificadores de Atributo
59
60
60
64
65
65
66
72
82
85
94
102
106
115
116
123
129
129
131
133
3
135
141
144
145
157
163
170
180
182
183
184
187
191
196
200
202
207
208
211
211
4
2.19.2.2. JApplet
2.19.2.3. Iniciando um Projeto Grfico
2.19.3. Fixao de Problemas (Quick Fix)
2.19.3.1. Fixao do Problema: imports nunca utilizados
2.19.3.2. Fixao do Problema: no declarao de serialVersionUID
2.19.4. Layout
2.19.5. Manipulao de Evento
2.19.5.1. Exemplos de manipulao de evento
2.20. Thread
2.20.1. Interface Runnable
2.20.2. Estendendo a Classe Thread
2.20.3. Sincronizando Threads
2.21. JFrame
2.21.1. Frame com mais de uma Thread em Execuo
2.22. JAR
2.22.1 Gerando o arquivo .jar
2.23. Tipos Genricos
2.23.1. Nomeando Variveis de Tipo: Conveno Utilizada
220
221
233
234
237
241
246
261
270
271
275
277
282
286
293
294
304
307
2.24. Colees
2.24.1. Algoritmos
2.24.1.1. Sort
2.24.1.2. Shuffle
2.24.1.3. Reverse
2.24.1.4. Rotate
2.24.1.5. Swap
2.24.1.6. ReplaceAll
2.24.1.7. Fill
2.24.1.8. BinarySearch
2.24.1.9. IndexOfSubList
2.24.1.10. LastIndexOfSubList
2.24.1.11. Frequency
2.24.1.12. Disjoint
2.24.1.13. Min
2.24.1.14. Max
2.24.2. Exemplo
2.25. JDBC
2.25.1. MySQL
2.25.2. Manipulando Dados no MySQL com Java
308
312
312
313
313
313
313
314
314
314
314
315
315
315
316
316
317
329
330
340
6
350
354
355
356
362
371
373
375
384
385
391
394
406
410
Referncias Bibliogrficas
415
1. Introduo
Java uma Linguagem de Programao orientada a objetos (LPOO),
projetada para ser portvel entre diferentes plataformas de hardware e software,
ou seja, um programa criado no ambiente Windows pode ser executado no
ambiente Linux ou UNIX.
Por exemplo, seja o arquivo PrimeiroExemplo.java contendo o cdigofonte que se deseja executar:
public class PrimeiroExemplo
{
public static void main(String[] args)
{
System.out.println("Primeiro Exemplo!");
}
}
Este programa escreve na tela a mensagem Primeiro Exemplo! .
10
12
1.3. Eclipse
Alm
do
modo
console,
pode-se
utilizar
um
ambiente
de
(refactoring),
que
altera
cdigo
mantendo
as
mesmas
1.3.1. Instalao
Para instalar o Eclipse, basta que seja efetuado o download do IDE (arquivo
.zip) em http://www.eclipse.org/downloads/, descomprimindo-o numa pasta
qualquer do HD do seu computador. Assim que o fizer, aconselho-o a criar um atalho
para o arquivo eclipse.exe, facilitando o acesso ao mesmo.
Neste trabalho ser utilizado o Eclipse IDE for Java EE Developers e o JRE
(Java Runtime Environment) para executar os programas Java. Efetue o download do
JRE adequado ao seu caso. Para o ambiente utilizado neste trabalho, acesse o site
http://www.oracle.com/technetwork/java/javase/downloads/jre-6u26-download-400751.html
e faa o download do arquivo jre-6u26-windows-x64.exe .
14
15
Em seguida, o Eclipse pede para voc informar o local que conter os arquivos dos
projetos criados por voc (Workspace):
16
17
1.3.3. Perspectiva
18
19
20
Ao surgir a janela de criao de um novo projeto, digite um nome para ele (por
exemplo, projeto1. Isto criar a pasta projeto1 no Workspace. Clique em Next.
21
A prxima janela diz respeito a configuraes adicionais (como a pasta onde ser
criado o bytecode gerado pelo projeto: Default output folder). Clique em Finish.
22
23
24
ATENO
Como j foi mencionado, Java sensvel ao caso do caractere. Isto
significa que, para o compilador Java, o caractere R diferente do caractere r.
Sempre inicie o nome da classe com uma letra. H uma conveno em
Java que recomenda que o nome de uma classe sempre inicie em maiscula.
uma boa prtica de programao. No utilize todos os caracteres do nome em
maiscula.
Utilize o prprio Eclipse para digitar seus cdigos, pois os caracteres de
alguns editores de texto como o MS-Word causam erro no cdigo (por exemplo, as
aspas do Word no so reconhecidas como aspas pelo editor do Eclipse).
26
27
28
Uma vez que voc altere o cdigo, o Eclipse realiza, de forma automtica, a
compilao. Isto pode ser visualizado no menu Project, item Build Automatically:
29
b) Pressionar Ctrl+F11;
c) Clicar no atalho:
30
Na janela que surge, clique em OK. Isto far com que o arquivo
PrimeiroExemplo.java seja salvo antes da execuo.
31
32
33
Caso seja cometido algum erro, como o no balanceamento das aspas duplas na
linha de comando, ou mesmo utilizar a letra s minscula para definir o comando
System, ser gerada uma mensagem de erro pelo compilador
34
35
b) Na janela Problems:
36
O Eclipse pode auxili-lo durante a digitao. Para ver como funciona, v ao cdigofonte, digite o trecho System. e pressione Ctrl+espao. Surge, ento, uma janela
propondo-lhe sugestes de cdigo. Clique em uma delas para visualizar um texto
explicativo e, em seguida, um clique duplo para aceit-la:
37
38
ou
desmarcar
39
visualizar
os
40
2. Programando em Java
Programas escritos em Java podem ser construdos para rodar na Web ou
localmente. Podem conectar equipamentos e controlar dispositivos. Enfim, uma
linguagem muito poderosa, e que permite a construo de poderosos sistemas em
ambientes crticos, como os utilizados em transaes financeiras, bem como
sistemas mais simples, em ambientes nem to crticos como os do mercado
financeiro.
uma linguagem que utiliza o paradigma da orientao a objetos,
implementando vrias das facilidades que esse paradigma disponibiliza.
41
2.1. Aplicativos
Aplicativos so cdigos Java com a seguinte estrutura mnima:
43
O mtodo main inicia com public static void main (String[] args),
seguido de chaves (aberta e fechada), delimitando o mtodo:
public class Nome_da_classe
{
public static void main(String[] args)
{
}
}
Observe que o mtodo foi escrito algumas colunas deslocadas direita, o
que chamado identao. Esta tcnica no altera o desempenho de execuo, ou
facilita a compilao, mas permite uma visualizao mais fcil do cdigo pelo
programador. uma boa prtica de programao, e deve ser utilizada.
45
Observaes:
a) No utilize espao em branco para separar as palavras de um nome composto.
Utilize, para esse fim, o trao sublinhado (underline), ou a tcnica de iniciar com
maiscula cada incio de palavra que compuser o nome. Por exemplo, se o
nome da classe deve conter as palavras primeiro e exemplo, ento, o nome
da classe pode ser: Primeiro_exemplo ou PrimeiroExemplo;
b) Eclipse posiciona a chave aberta aps o nome da classe e aps o nome do
mtodo. No exemplo dado neste trabalho, a chave aberta foi posicionada logo
abaixo do nome da classe e do nome do mtodo. Independe o posicionamento
da chave aberta. O importante a abertura e o fechamento dos limites (da
classe e do mtodo main), a despeito de qual tcnica seja utilizada.
46
47
Tipos mais comum em Java, memria ocupada, e valores que podem ser atribudos
a uma varivel do tipo especificado:
- Tipo inteiro:
- long (64 bits): -9.223.372.036.854.775.808L a + 9.223.372.036.854.775.807L
- int (32 bits): -2.147.483.648 a + 2.147.483.647
- short (16 bits): -32.768 a +32.767
- byte (8 bits): -128 a + 127
- Tipo em ponto flutuante:
- double (64 bits): 1,797693134862311570 x 10+308 (15 dg. signif.)
- float (32 bits): 3,40282347 x 10+38 (7 dg. signif.)
- Tipo lgico (booleano):
- boolean (1 bit): false / true
48
- Tipo caractere:
- char (16 bits): Caracteres alfanumricos e simblicos, delimitados por aspas
simples (apstrofes). Uma varivel do tipo char s pode
armazenar um (e apenas um) caractere por vez.
- Tipo literal:
- String: Conjunto de caracteres (alfanumricos e simblicos) delimitados por
aspas duplas. Observe que String, ao contrrio dos demais tipos
listados anteriormente, String inicia com letra maiscula. Na
realidade, trata-se de uma classe, mas a utilizaremos, por enquanto,
como um tipo comum.
49
Observao:
a) Para iniciar um novo projeto, de um clique com o boto direito do mouse no
nome do projeto atualmente em uso (visvel no Package Explorer) e, em
seguida, em Close Project. Caso haja alteraes no salvas, aparecer a janela
de confirmao abaixo:
b) Em seguida, repita as operaes para criar um projeto Java. Aps criada, voc
poder criar uma nova classe clicando com o boto direito do mouse no nome
do novo projeto (tambm visvel no Package Explorer).
51
byte f = 10, g, h;
char primeira_letra = A;
int b, c, d = 100;
double i;
short e;
float j;
Observaes:
a) As variveis d, f, primeira_letra, valido e str so iniciadas na declarao;
b) Os nomes das variveis so de responsabilidade do programador. Pode ser o
nome que voc desejar. Um mtodo no pode ter duas variveis com o mesmo
nome;
c) Inicie o nome da varivel com letra minscula ou trao sublinhado (underline).
Os demais podem ser caracteres, traos sublinhados e/ou nmeros. No use
espaos em branco ou caracteres especiais ou acentuados.
54
55
2.4. Comentrios
Muitas vezes, deve-se adicionar uma ou mais linhas de comentrio ao
cdigo, sendo que o comentrio de uma linha iniciado por // , e o de vrias
linhas delimitado por /* e */ . Por exemplo:
public class Atrib_Val // O nome da classe deve iniciar com maiscula
{
public static void main (String args[])
{
/*
O cdigo (linhas de comando) fica aqui.
Toda linha de comando termina com um
ponto e vrgula.
*/
System.out.println (Exemplificando comentrios!);
}
}
56
\n
\t
TAB tabulao
\\
Barra invertida
Apstrofo
Aspas
57
Por exemplo:
58
2.6. Operadores
Ao executar o trecho de cdigo abaixo:
System.out.println (Dez = + 10);
Java realiza as seguintes tarefas:
a) Converte o nmero 10 na string 10;
b) Une (concatena) a string Dez = com a string 10 (da converso acima);
c) Imprime (na tela) a string resultante da concatenao: Dez = 10.
A operao de concatenao realizada pelo operador de concatenao: +.
Java define os seguintes operadores: atribuio, aritmticos, relacionais,
lgicos e concatenao.
59
Operador
Exemplo
num = 10
Explicao
A varivel num recebe 10
Operador
Exemplo
Explicao
Adio
a + b
Positivo (unrio)
+ a
Subtrao
a - b
Negativo (unrio)
- a
Multiplicao
a * b
Os contedos de a e b so multiplicados
Diviso
a / b
Mdulo
a % 2
60
Observao:
a) H dois operadores aritmticos unrios, denominados: incremento e
decremento. Eles operam de forma semelhante s operaes de adio e
subtrao, respectivamente, mas com somente um operando.
Na tabela abaixo, listam-se exemplos desses operadores:
Nome
Operador
Operao
Explicao
Pr-incremento
++
++ a
Ps-incremento
++
a ++
Pr-decremento
--
--a
Ps-decremento
--
a--
61
b = 1;
r2 = b ++ ;
c = 1;
r3 = - - c ;
d = 1;
r4 = d - - ;
b recebe 1
r2 recebe 1
b passa a 2
c recebe 1
c passa a 0
r3 recebe 0
d recebe 1
r4 recebe 1
d passa a 0
Tem-se que:
a recebe 1
a passa a 2
r1 recebe 2
62
A operao
Equivale a
a += 2;
a = a + 2;
a -= 2;
a = a - 2;
a *= 2;
a = a * 2;
a /= 2;
a = a / 2;
a %= 2;
a = a % 2;
No exemplo dado, ao invs de se utilizar o valor dois, poderia ser utilizada uma
varivel, sendo que o valor final da varivel a passaria a depender do valor dessa
outra varivel. Deve-se, pois, tomar cuidado para no haver diviso do valor de a
por zero, o que ocasionaria um erro em tempo de execuo.
63
Operador
Operao
Igual a
==
a==b
Diferente de
!=
a !=b
Maior que
>
a > b
>=
a >= b
<
a < b
<=
a <= b
Maior ou igual a
Menor que
Menor ou igual a
Explicao
64
Operador
Operao
Negao
!a
E (AND)
&&
a == 1 && b = = 5
OU (OR)
||
a == 1 || b = = 5
Explicao
Resulta false se a true, e vice-versa
Resulta true se e somente se a igual a 1 e b igual a 5;
do contrrio, resulta false
Resulta true se a igual a 1 ou b igual a 5; se a for
diferente de 1 e b for diferente de 5, resulta false
Operador
Operao
Concatenao
Al + voc!
Explicao
Resulta na string Al voc!
65
2.7. Mtodo
Conforme voc vai tornando o seu programa complexo, voc deve
subdividi-lo em partes menores, cada parte desta executando tarefas especficas,
tornando o cdigo mais simples de manter (fazer correes e melhorias), ou seja,
voc deve utilizar sub-rotinas chamadas mtodos na orientao a objetos .
Mtodos, ento, so trechos de cdigo executados uma ou vrias vezes
dentro do cdigo principal (mtodo main) ou dentro de outros mtodos. Java
disponibiliza, por meio de suas classes predefinidas, mtodos com vrias
finalidades. Alm desses, outros mtodos podem ser criados pelo programador.
Por exemplo, a classe Math possui vrios mtodos para executar rotinas
matemticas, como a raiz quadrada (square root), como mostrado abaixo, onde a
varivel n recebe a raiz quadrada de 16 (que igual a 4.0):
double n = Math.sqrt (16) ;
66
67
Assim, o valor double contido na varivel d deve ser convertido para int antes ser
atribudo varivel num. Isto se faz explicitando o novo tipo, que deve estar
delimitado por parnteses, entre o operador de atribuio e o valor a ser
convertido, como mostrado abaixo:
int num ;
double d = 1 ; // a converso (implcita) para 1.0 realizada
num = (int) d;
System.out.println (num) ;
return valor_retorno ;
Para utiliz-lo, voc deve escrever seu cdigo entre as chaves do cdigo principal. A
chamada ao mtodo feita em outro mtodo (no caso abaixo, o mtodo main):
75
Voc pode definir variveis dentro do mtodo, mas elas somente sero visveis
dentro do prprio mtodo. Assim sendo, uma varivel definida no mtodo eleva
no visvel dentro do mtodo main. A forma geral de definio de um mtodo
como abaixo:
static <tipo_do_mtodo> <nome_do_mtodo> ( )
{
declarao de variveis locais
comandos ;
return <valor> ;
}
As informaes entre os sinais de menor (<) e maior (>) devem ser fornecidas pelo
programador.
76
No caso do mtodo eleva, j foi dito que ele poderia trabalhar com variveis
internamente, ao invs de valores constantes,
static int eleva ( )
{
int a, b = 6;
a = b * b * b *b *b;
return a ;
}
{
}
81
2.8. Atributo
Uma varivel criada dentro dos limites de um mtodo s enxergada
por aquele mtodo, no sendo enxergada pelos demais mtodos da classe. Isto
significa dizer que o trecho de cdigo abaixo,
static int dobro ()
{
return num * 2;
}
Segue, abaixo, a classe Operacao, seu atributo num e seus mtodos dobro e main:
class Operacao
{
static int num = 5;
static int dobro ()
{
return num * 2;
}
87
Repita os passos anteriores (File -> New -> Class) para criar a classe
Triangulo, completando-a com o cdigo abaixo:
88
Para finalizar, crie uma terceira classe, Figuras, a qual ser o nosso
aplicativo (a que conter o mtodo main). Marque a opo para criar o mtodo
main e, em seguida, clique em Finish.
89
90
Pelos resultados obtidos, observa-se que cada figura teve seu permetro
corretamente calculado.
Dito isto, pode-se agora definir alguns conceitos:
Classe: um tipo especial que contm atributos (variveis) e mtodos (funes)
para manipular os atributos da classe;
Atributos: so as variveis definidas em uma classe;
Mtodos: so as funes que, retornando ou no valor, servem para, entre outras
coisas, alterar os atributos da classe a qual pertencem ou efetuar
clculos utilizando valores internos e frmulas (como o clculo dos
permetros das figuras).
91
Objeto: uma varivel cujo tipo uma classe. Diz-se, tambm, ser uma varivel de
instncia de uma classe. Uma vez declarado o objeto de uma classe, podese manipular seus atributos, ou invocar seus mtodos, por meio do objeto
daquela classe, bastando, para isso, inici-lo por meio do operador new:
a)
b)
2.10. Herana
Uma das maiores vantagens da programao orientada a objetos, a
possibilidade de reaproveitar o cdigo j existente, sem a necessidade de
repetio, e o Java fortemente orientado a objeto.
Por exemplo, suponha que na firma hipottica PJL, os empregados sejam
identificados por suas matrculas e nomes, e possuem um salrio. H, porm, duas
subclasses de empregados: os vendedores e os tcnicos. Os vendedores tem uma
comisso sobre o salrio e os tcnicos tem um ttulo (advogado, engenheiro, etc.).
Isso significa dizer que o vendedor tem, alm de matrcula, nome, e
salrio, uma quarta informao, a porcentagem de comisso, ou seja, podemos
dizer que a classe Vendedor herda os atributos da classe Empregado, e define seu
prprio atributo (comissao). O mesmo pode-se dizer da classe Tecnico, cuja quarta
informao o atributo titulo.
94
Vendedor
comissao : double
Tecnico
titulo : String
Inicie um novo projeto no Eclipse. Crie uma classe e lhe d o nome Empregado.
Lembre-se que, pela conveno criada pela Sun para a linguagem Java, uma classe
inicia com letra maiscula. Deixe a opo para criar a funo main desmarcada.
Clique em Finish. Em seguida, complete a classe com o cdigo em negrito abaixo:
public class Empregado{
int matricula;
String nome;
double salario;
}
Salve as alteraes.
96
Salve as alteraes.
Crie, agora, a classe Tecnico e complete a classe com o cdigo em negrito abaixo:
public class Tecnico extends Empregado{
String titulo;
}
97
// 20% de comisso
98
e.nome = "Antnio";
e.matricula = 1234 ;
e.salario = 200.00;
v.nome = "Joo";
v.matricula = 1235 ;
v.salario = 200.00;
v.comissao = 20;
// 20% de comisso
t.nome = "Jos";
t.matricula = 1236 ;
t.salario = 2000.00 ;
t.titulo = "Doutor";
100
101
int a = 1;
}
int b = 2;
}
102
104
ATENO
Uma superclasse (genrica) no pode ser convertida para uma subclasse
(especfica), ou seja, o objeto de uma subclasse no pode ser instanciado por meio
de uma chamada ao mtodo construtor da superclasse, mesmo com converso
explcita de tipo. Sendo assim, o seguinte trecho seria invlido:
105
2.11. Polimorfismo
No s atributos podem ser herdados; mtodos tambm o podem. No
caso da firma PJL, o vendedor deve ter x% de comisso.
Suponha que seja necessria a construo de mtodo que calcule o
salrio lquido de todos os empregados, descontando-se 15% de imposto. Por
exemplo, considerando-se os salrios:
Empregado = 200,00
Vendedor = 200,00 // Salrio-base
Obs.: Supondo uma comisso de 20% , o salrio de Vendedor vai a: 240,00,
resultado de: 200,00 + 20% = 200,00 + 40,00 = 240,00
Tcnico = 2.000,00
106
Vendedor = 204,00
Tcnico = 1700,00
O mtodo para clculo do salrio para a classe Empregado (e que ser herdado
pela classe Tecnico) pode ser igual a:
public double sal_liq()
{
return 0.85 * salario;
}
Obs.: Retirar x% de um valor, o mesmo que multiplic-lo por [1.0 - (x100)], pois:
a) 15% de 100 = 100 15% de 100 = 100 (100 x 0.15) = 100 15 = 85
b) 15% de 100 = 100 x 0.85 = 85
107
A classe Vendedor, porm, dever implementar seu prprio mtodo, uma vez que
o clculo difere daquele utilizado pelo mtodo da superclasse:
public double sal_liq()
{
double sal;
sal = salario * (1+comissao/100); // aumento da (comisso)
sal = 0.85 * sal;
// desconto de 15%
return sal;
}
108
Graficamente, tem-se:
Empregado
matricula : int
nome : String
salario : double
sal_liq() : double
Vendedor
comissao : double
Tecnico
titulo : String
sal_liq() : double
Sendo assim, preciso alterar os cdigos das classes Empregado e Vendedor, alm
do aplicativo (classe Firma), para que os salrios lquidos sejam visualizados.
109
110
111
113
2.11.1. @Override
A anotao @Override utilizada quando o mtodo da subclasse deve
sobrescrever o mtodo da superclasse utilizando a mesma assinatura, ou seja,
mesmo tipo de retorno, mesmo nome e os mesmos parmetros (quantidade,
nomes e tipos). Os blocos de comando que os mtodos definem podem ser
diferentes, mas as assinaturas devem ser as mesmas.
115
2.12. Pacote
Um pacote serve para agrupar um conjunto de classes em funo de suas
responsabilidades, permitindo a viso do todo em subsistemas, tornando mais fcil
seu entendimento.
em Java, uma boa prtica de programao criar um pacote, unidade de
software que conter uma ou mais classes. Um pacote tambm pode conter outros
pacotes.
Uma vez criado, voc poder utilizar as classes (mtodos e atributos) que
fizerem parte daquele pacote, bastando que voc o importe.
Por exemplo, o aplicativo abaixo exibe informaes de data e hora do
sistema:
116
System.out.println ("Ms:
System.out.println ("Minuto:
System.out.println ("Segundo:
"
System.out.println ("AM_PM:
"
+ cal.get (Calendar.YEAR));
+ cal.get (Calendar.MONTH) + " (janeiro = 0)");
+ cal.get (Calendar.WEEK_OF_YEAR));
+ cal.get (Calendar.WEEK_OF_MONTH));
+ cal.get (Calendar.DAY_OF_MONTH));
+ cal.get (Calendar.DAY_OF_YEAR));
+ cal.get (Calendar.DAY_OF_WEEK) + " (domingo= 1)");
+ cal.get (Calendar.HOUR_OF_DAY));
+ cal.get (Calendar.HOUR));
+ cal.get (Calendar.MINUTE));
+ cal.get (Calendar.SECOND));
+ cal.get (Calendar.AM_PM) + " (manh = 0)");
}
}
117
import java.util.Calendar;
import java.util.GregorianCalendar;
public class Hora {
public static void main (String args [ ])
{
Calendar cal = new GregorianCalendar();
System.out.println ("Ano:
System.out.println ("Ms:
System.out.println ("Semana do ano:
System.out.println ("Semana do ms:
System.out.println ("Dia do ms:
System.out.println ("Dia do ano:
System.out.println ("Dia da semana:
System.out.println ("Hora (24h):
System.out.println ("Hora:
System.out.println ("Minuto:
System.out.println ("Segundo:
System.out.println ("AM_PM:
"
"
"
"
+ cal.get (Calendar.YEAR));
+ cal.get (Calendar.MONTH) + " (janeiro = 0)");
+ cal.get (Calendar.WEEK_OF_YEAR));
+ cal.get (Calendar.WEEK_OF_MONTH));
+ cal.get (Calendar.DAY_OF_MONTH));
+ cal.get (Calendar.DAY_OF_YEAR));
+ cal.get (Calendar.DAY_OF_WEEK) + " (domingo= 1)");
+ cal.get (Calendar.HOUR_OF_DAY));
+ cal.get (Calendar.HOUR));
+ cal.get (Calendar.MINUTE));
+ cal.get (Calendar.SECOND));
+ cal.get (Calendar.AM_PM) + " (manh = 0)");
}
}
119
2011
6 (janeiro = 0)
31
5
26
207
3 (domingo = 1)
19
7
1
47
1 (manh = 0)
As linhas de comando:
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.*;
121
C:\Users\usuario\workspace\prj_pacote\src\br\com\pacote
122
123
package exemplo_pacote;
public class Operacao
{
private int num;
public int getNum()
{
return num;
}
public void setNum(int num)
{
this.num = num;
}
public int dobro()
{
return getNum() * 2;
}
}
124
Crie, agora, outro projeto e lhe d o nome prj_usa_operacao. Certifiquese que o projeto prj_Operacao est aberto (caso no esteja, d um clique duplo
sobre o nome do projeto). Clique com o boto direito do mouse sobre o nome do
projeto e depois em Build Path; em seguida, clique em Configure Build Path... . Na
tela que surge (janela Properties for prj_usa_operacao), na aba Projects, clique no
boto Add... como mostrado abaixo:
125
Boto Add...
126
prj_operacao
127
2.13. Modificadores
Na construo dos aplicativos, observa-se que o Eclipse insere a palavra
public antes de classes e mtodos, alm da palavra static antes do mtodo main.
As palavras public e static so denominadas modificadores, cujas
caractersticas so listadas a seguir.
2.13.1 Modificadores de Classe
- PUBLIC: Classes public podem ser instanciadas por qualquer objeto livremente.
Para declarar uma classe como public, inclua a palavra reservada public
na definio da classe.
public class Nome_da_Classe
129
130
- STATIC: Um mtodo com visibilidade static pode ser invocado sem a utilizao de
um objeto, como o caso do mtodo main na criao de um aplicativo.
public static void main (String args[])
Por exemplo, a partir da declarao:
public class Operacao {
public static String msg()
{
return "Mensagem";
}
Outra classe pode invocar o mtodo msg() por meio do nome da classe
Operacao (no preciso instanci-la):
public class Testa_static {
public static void main(String[] args) {
System.out.println ( Operacao.msg() );
132
- PRIVATE: Faz com que o atributo somente possa ser manipulado na classe em que
definido.
private double salario;
- STATIC: Um atributo static pode ser manipulado sem a utilizao de um objeto.
Por exemplo, a partir da declarao:
public class Operacao {
public static int num;
Outra classe do mesmo pacote (ou mesmo uma subclasse) pode alterar o
valor de num por meio do nome da classe Operacao (no preciso
instanci-la):
public class Testa_static {
public static void main(String[] args) {
Operacao.num = 2;
134
135
Por exemplo, seja a classe Numero que define o atributo num, o mtodo getNum
(para retornar o valor que num possa conter no momento da chamada ao mtodo)
e o mtodo setNum, cuja funo atribuir o valor passado por parmetro ao
atributo. O cdigo como segue:
public class Numero
{
private int num;
public int getNum()
{
return num;
}
public void setNum(int num)
{
this.num = num;
}
}
136
No cdigo acima, observa-se que getNum retorna o valor do atributo num, ou seja,
informa o valor de num no momento da chamada ao mtodo.
public int getNum()
{
return num;
}
J o mtodo setNum deve atribuir o valor do parmetro ao atributo num
da classe. Porm, observe que a varivel de parmetro tem o mesmo nome do
atributo da classe: num. Diferencia-se a varivel do atributo pelo uso da palavrachave this. Dessa forma, o atributo num pode ser manipulado utilizando-se a
forma: this.num, sendo obrigatrio o uso de this quando o atributo for manipulado
em um mtodo que possua uma varivel de mesmo nome (do contrrio, o
compilador Java no saber que se deseja manipular o atributo, ao invs da
varivel).
137
138
Toda classe Java tem definida, de maneira implcita, alm da palavrachave this a palavra-chave super.
Como foi visto, a palavra this referencia a classe atual (na qual
utilizada). J a palavra super referencia atributos e mtodos da classe ancestral
(superclasse).
Como exemplo, sero construdas duas classes, uma delas por herana,
onde o mtodo imprime servir para identificar qual classe tem o mtodo
executado.
public class Super_classe
{
String mensagem ( )
{
return Mensagem da Super classe;
}
}
139
140
2.15. Interface
Em uma linguagem como C++, pode-se utilizar o mecanismo da herana
mltipla, onde duas ou mais classes geram outra por herana. O exemplo clssico
a ser citado, o da classe CarroAnfibio, formado, por herana das classes Carro e
Barco:
class CarroAnfibio : public Carro, public Barco
141
142
Pode-se utilizar, tambm, uma clusula else, para execuo de comandos nos
casos em que a condio aps o if for falsa (false). Sintaxe:
if (<condio>)
{
comando11;
comando1N;
}
else
{
comando21;
comando2N;
}
148
E o algoritmo:
Incio
real a, b, c, delta, x1, x2
ler a , b, c
delta b * b 4 * a * c
se (delta < 0)
{
escrever No h razes reais
}
seno
{
x1 ( -b + raiz_quadrada (delta) ) / (2 * a)
x2 ( -b - raiz_quadrada (delta) ) / (2 * a)
escrever x1 = , x1 , x2 = , x2
}
Fim.
149
Obs.: O valor lido por showInputDialog tem o tipo String. Caso voc necessite ler
um valor do tipo numrico, voc precisa converter o valor de String para
numrico, utilizando, ou o mtodo parseInt da classe Integer:
String snum;
int
num;
snum= JOptionPane.showInputDialog(Nmero");
num = Integer.parseInt(snum);
151
Obs.: A leitura tambm pode ser realizada dentro dos parnteses do mtodo de
converso. Por exemplo:
double num = Double.parseDouble( JOptionPane.showInputDialog(Digite o valor de a ") );
a=1
b = 10 ;
c=5
152
import javax.swing.*;
public class Eq2Grau {
public static void main(String[] args) {
double a = Double.parseDouble(JOptionPane.showInputDialog("Digite o valor de a"));
double b = Double.parseDouble(JOptionPane.showInputDialog("Digite o valor de b"));
double c = Double.parseDouble(JOptionPane.showInputDialog("Digite o valor de c"));
double delta = b*b - 4*a*c;
if (delta < 0)
System.out.println ("No existem razes reias!");
else
{
double x1 = (-b + Math.sqrt(delta))/(2*a);
double x2 = (-b - Math.sqrt(delta))/(2*a);
System.out.println ("Com println: x1= " + x1 + " - x2= " + x2);
System.out.printf ("Com printf : x1= %1.3f - x2= %10.2f \n", x1, x2);
}
}
}
153
-9,47
-9,47
Como x2 possui cinco dgitos, a sada preenchida com cinco espaos em branco
antes do sinal menos (unrio).
155
1,0000000
156
}
Este comando executa o primeiro bloco de comandos aps do case que contiver
valor igual ao da varivel avaliada dentro dos parnteses do switch. A execuo s
para quando encontrada a clusula break, ou quando o comando switch termina.
157
snum= "Um";
break;
case 2:
snum= "Dois";
break;
case 3:
snum= "Trs";
break;
}
JOptionPane.showMessageDialog(null,"Nmero por extenso: " + snum);
}
}
158
Obs.: A varivel snum foi iniciada com " valor fornecido fora do intervalo!, pois, caso
seja fornecido um nmero fora do intervalo considerado (1, 2 ou 3), ser
impressa a mensagem de erro:
Nmero por extenso: valor fornecido fora do intervalo!
Resolve-se isto, tambm, pela utilizao da clusula default (opcional) do
comando switch, cujo bloco executado nos casos em que nenhum valor
anterior atenda avaliao efetuada.
String snum;
switch (num) {
case 1: snum= "Um";
break;
case 2:
snum= "Dois";
break;
case 3:
snum= "Trs";
break;
default:
}
159
case 'b':
case 'B': p = "b";
break;
case 'w':
case 'W': p = "dabli";
break;
default: p = "Letra fora do intervalo!";
}
JOptionPane.showMessageDialog(null, "Pronncia da letra " + letra + ":\n" + p);
}
}
Obs.: Observe que, se for digitada a letra em caixa baixa, o comando switch iniciar a
execuo do bloco vazio (no contm comando algum); porm, como no h
clusula break, a execuo continua com os comandos do bloco aps a letra em
caixa alta at encontrar a clusula break.
161
Obs.: Uma condio inicialmente falsa faz com que o comando for seja finalizado sem
executar o bloco de comandos. Por exemplo, o cdigo abaixo deveria escrever
todos os valores entre 100 e 1, mas a condio foi escrita como i < 0, o que faz
com o loop finalize sem executar comando algum do bloco:
public class Repeticao_com_For {
public static void main(String[] args) {
int i;
for (i = 100 ; i < 0 ; i--)
{
System.out.println (i);
}
System.out.println (Loop finalizado!);
}
}
Neste caso, a condio deveria ser igual a: i > 0 .
168
Obs.: Um exemplo com for que inicia duas variveis dentro dos parnteses (bem
como, atualiza tambm ambas as varivel):
public class Repeticao_com_For {
public static void main(String[] args) {
int i;
float n;
for (i = 0, n=0; i < 10 ; i++ , n+=0.25)
{
System.out.println (n);
}
System.out.println ("Loop finalizado!");
}
}
Este cdigo imprime os dez primeiros valores, iniciando em 0, variando de 0,25
em 0,25. Observe o uso da vrgula em i = 0, n=0 e i++ , n+=0.25.
169
Isto significa que: enquanto (while) a <condio> for verdadeira devese executar os comandos do bloco.
170
// i recebe 1
i<6?
// 1 < 6 ?
ii+1
// i recebe 2
i<6?
ii+1
// 2 < 6 ?
// i recebe 3
i<6?
ii+1
// 3 < 6 ?
// i recebe 4
i<6?
ii+1
// 4 < 6 ?
// i recebe 5
i<6?
ii+1
// 5 < 6 ?
// i recebe 6
i<6?
ii+1
// 6 < 6 ?
// i recebe 7
// i recebe 0
i<5?
// 0 < 5 ?
ii+1
// i recebe 1
i<5?
ii+1
// 1 < 5 ?
// i recebe 2
i<5?
ii+1
// 2 < 5 ?
// i recebe 3
i<5?
ii+1
// 3 < 5 ?
// i recebe 4
i<5?
ii+1
// 4 < 5 ?
// i recebe 5
i<5?
ii+1
// 5 < 5 ?
// i recebe 6
// i recebe 0
ii+1
// i recebe 1
i<6?
// 1 < 6 ?
// i recebe 2
// 2 < 6 ?
// i recebe 3
// 3 < 6 ?
ii+1
i<6?
// i recebe 4
// 4 < 6 ?
// i recebe 5
i<6?
// 5 < 6 ?
ii+1
i<6?
// i recebe 6
// 6 < 6 ?
178
Por exemplo, o cdigo abaixo l uma frase enquanto no for digitada a palavra fim
(frase no igual a fim):
import javax.swing.*;
public class Repeticao_while {
public static void main(String[] args) {
String frase = "";
while (!frase.equals("fim"))
{
frase = JOptionPane.showInputDialog("Digite uma frase");
}
System.out.println ("Loop finalizado!");
}
}
Este exemplo demonstra como comparar o valor de uma varivel String com outro
valor (tambm String) por meio do mtodo equals (da classe String). Observe o
operador de negao ! posicionado antes do mtodo equals.
179
Por exemplo, o cdigo abaixo l uma frase enquanto no for digitada a palavra fim:
import javax.swing.*;
public class Repeticao_while {
public static void main(String[] args) {
String frase;
do
{
frase = JOptionPane.showInputDialog("Digite uma frase");
} while (!frase.equals("fim"));
System.out.println ("Loop finalizado!");
}
}
181
2.17. Array
Variveis so criadas em um cdigo para permitir a manipulao de
valores. Porm, em determinados momentos, a quantidade de valores a manipular
to grande, que inviabiliza a criao e gerncia desses valores (por meio de suas
variveis).
Resolve-se esse problema criando variveis do tipo array (que podem
atuar como matrizes), as quais contm sequncias de valores de mesmo tipo.
So variveis indexadas, homogneas (todos os valores armazenados
devem ser do mesmo tipo de dados), e que podem ter seus valores alterados por
meio de ndices.
182
184
i1
j0
j1
j2
i2
j0
j1
j2
Obs.: O primeiro for executa somente um comando, que o segundo for, o qual
executa o bloco. Por isso que somente o segundo for utiliza chaves.
186
187
Coluna 0
Coluna 1
Coluna 2
Linha 0
mat[0][0]
mat[0][1]
mat[0][2]
Linha 1
mat[1][0]
mat[1][1]
mat[1][2]
Linha 2
mat[2][0]
mat[2][1]
mat[2][2]
mat =
188
Por exemplo, a classe seguinte imprime o ms, o dia da semana e o turno, por extenso,
utilizando arrays:
import java.util.*;
public class Hora
{
public static void main (String args [ ])
{
Calendar cal = new GregorianCalendar();
String [ ] mes = { "Janeiro" , "Fevereiro" , "Maro" , "Abril" , "Maio" , "Junho" ,
"Julho" , "Agosto" , "Setembro" , "Outubro" , "Novembro" , "Dezembro"} ;
String [ ] semana = { "Domingo" , "Segunda-feira" , "Tera-feira" , "Quarta-feira",
"Quinta-feira" , "Sexta-feira" , "Sbado} ;
String [ ] am_pm = { "AM","PM"} ;
System.out.println ("Ms:
System.out.println ("Dia da semana:
System.out.println ("AM_PM:
+ mes [cal.get(Calendar.MONTH)]);
+ semana [cal.get (Calendar.DAY_OF_WEEK)-1]);
+ am_pm [cal.get (Calendar.AM_PM)]);
}
}
189
tem o valor de retorno diminudo de uma unidade, porque, por exemplo, o mtodo
retorna 1 quando se trata de domingo; porm, no array semana, domingo est
localizado na posio 0 do array:
String [ ] semana = { "Domingo" , "Segunda-feira" , "Tera-feira" , "Quarta-feira",
"Quinta-feira" , "Sexta-feira" , "Sbado} ;
Obs.: Pode-se declarar variveis definindo o tipo seguido de seus nomes, como em,
int a, b, c;
Da mesma forma, pode-se declarar arrays:
String [ ]
mes = { "Jan" , "Fev" , "Mar" , "Abr" , "Mai" , "Jun , "Jul" , "Ago" , "Set" , "Out" , Nov" , "Dez" }
semana = { "Domingo" , "Segunda" , "Tera" , "Quarta", "Quinta" , "Sexta" , "Sbado " }
am_pm = { "AM","PM" }
;
190
191
Este bloco tenta (try) executar um ou mais comandos. Em caso de erro, uma
exceo levantada, a execuo do bloco interrompida e o fluxo de execuo
do programa passa imediatamente a ser executado aps a captura (catch) da
exceo. Por exemplo, crie o aplicativo abaixo para somar dois valores inteiros. Na
execuo, fornea um nmero qualquer e, em seguida, a letra w:
import javax.swing.*;
public class Trata_Excecao {
public static void main(String[] args) {
int a, b, resultado;
a = Integer.parseInt(JOptionPane.showInputDialog("Digite um nmero"));
b = Integer.parseInt(JOptionPane.showInputDialog("Digite outro nmero));
resultado = a + b;
System.out.println (Resultado: + resultado);
}
}
192
Quando a letra fornecida, ocorre uma exceo, com a gerao de uma mensagem
de erro parecida com esta:
Exception in thread "main" java.lang.NumberFormatException: For input string: w"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at Trata_Excecao.main(Trata_Excecao.java:8)
import javax.swing.*;
public class Trata_Excecao {
public static void main(String[] args) {
int a, b, resultado;
try {
a = Integer.parseInt(JOptionPane.showInputDialog("Digite um nmero"));
b = Integer.parseInt(JOptionPane.showInputDialog("Digite outro nmero));
resultado = a + b;
System.out.println (Resultado: + resultado);
}
catch ( Exception erro) {
System.out.println (Entrada invlida!);
}
}
}
194
Assim, caso uma das entradas seja invlidas, a mensagem Entrada invlida! emitida.
Pode-se, tambm, exibir a mensagem de erro da classe Exception, instanciada
durante a captura da exceo gerada. Para tal, deve-se alterar o cdigo anterior:
catch ( Exception erro) {
System.out.println (Mensagem de erro: + erro.getMessage() );
}
195
a) AWTException
Quando ocorre uma exceo nas operaes grficas.
b) ClassNotFoundException
Quando uma classe instanciada mas o interpretador Java no consegue
encontr-la.
196
c) CloneNotSupportedException
Clones so cpias exatas de objetos. Por exemplo:
String nome1 = Exemplo de clone;
String nome 2 = nome1.toString ( );
faz com que nome2 clone o objeto nome1 , isto , so objetos diferentes com o mesmo
contedo.
Assim sendo, uma exceo CloneNotSupportedException ocorre, quando a classe que a
utiliza no implementa a interface Cloneable.
public class <nome> implements Cloneable
d) IllegalAccessException
Quando o mtodo invocado no pblico ou est em um pacote no visvel
pela classe, ocorre uma exceo de acesso ilegal.
197
e) InstantiationException
Quando uma classe no pode ser instanciada por uma classe abstrata ou ser
uma interface (interfaces devem ser implementadas).
f) InterruptedException
Quando uma thread interrompe outra thread que j estava interrompida.
g) NoSuchMethodException
Quando um mtodo no encontrado pelo interpretador Java.
h) IOException
Quando ocorre um erro de I/O (do ingls: Input/Output, que significa:
Entrada/Sada).
198
i) RuntimeException
Quando ocorre um erro em tempo de execuo.
j) SQLException
Prov informaes sobre erros ocorridos em acessos a uma base de dados.
Obs.: De vrias dessas derivam outras, fornecendo manipulaes ainda mais especficas.
Por exemplo, de RuntimeException derivam ArithmeticException (nos erros em
operaes aritmticas, como, por exemplo, diviso por zero no permitido para
operaes computacionais), ou ArrayIndexOutOfBoundsException (quando um
array acessado com um ndice ilegal).
199
201
206
207
208
2.19.2. Swing
Swing permite o desenvolvimento de interfaces grficas com Java. E isto
facilitado com a instalao do framework Window Builder.
2.19.2.1. Instalao do Window Builder
Clique em Help -> Eclipse Marketplace :
209
Em seguida, clique na seta que um link para o site de atualizao (Update Site):
212
Na parte inferior desta janela, voc pode conferir que o plugin gratuito
(Commercial Free).
213
214
216
Clique em I accept the terms of the license agreement, e, depois, em Finish para
instalar os plugins.
217
218
219
2.19.2.2. JApplet
221
223
224
225
Salve e execute.
228
Nela pode-se ver o label e o campo de texto. Observe que as dimenses do campo
de texto so muito grandes, em razo do layout utilizado (BorderLayout).
229
232
233
234
235
236
237
238
Caso a opo selecionada seja: Add default serial version ID, o Eclipse adiciona a
declarao abaixo (em negrito):
public class MeuAppplet extends JApplet {
private static final long serialVersionUID = 1L;
private JTextField textField;
Caso a opo selecionada seja: Add generated serial version ID, o Eclipse adiciona a
declarao abaixo (em negrito):
public class MeuAppplet extends JApplet {
private static final long serialVersionUID = 6147590370495918235L;
private JTextField textField;
239
Obs.: Caso voc selecione itens relacionados a problemas diferentes e pea para
fixar o problema (Quick Fix), o Eclipse exibir a janela de advertncia abaixo:
Neste caso, selecione problemas similares para depois clicar em Quick Fix,
ou ento, clique em Source Clean Up... e configure conforme desejado.
240
2.19.4. Layout
O posicionamento de widgets em uma interface pode ser de forma
absoluta, ou atravs de Gerenciadores de Layout (Layout Managers).
O Eclipse (por meio do Window Builder) disponibiliza 10 gerenciadores
de layout: BorderLayout, BoxLayout, CardLayout, FlowLayout, FormLayout,
GridLayout, GridBagLayout, GroupLayout, MigLayout e SpringLayout.
a) Absolute layout
Este modo dispensa os gerenciadores de layout, e permite o
posicionamento dos componentes de forma absoluta.
b) BorderLayout
Posiciona e redimensiona os componentes em cinco regies: NORTH
(acima), SOUTH (abaixo), EAST (direita), WEST (esquerda) e CENTER (centro).
241
c) BoxLayout
Posiciona os componentes um em cima do outro (mtodo construtor
passando o parmetro Y_AXIS),
getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
d) CardLayout
Utilizado para gerenciar vrias pginas dentro de uma mesma janela,
sendo que somente uma pgina visvel por vez, como num arquivo de fichas.
e) FlowLayout
Arranja os componentes horizontalmente, da esquerda para a direita.
242
f) FormLayout
g) GridLayout
Dispe os componentes segundo uma grade, sendo que a dimenso da
clula que determina a dimenso dos componentes, pois um componente
sempre ocupa uma clula inteira. O mtodo construtor deve definir: n de linhas,
n de colunas, separao horizontal e separao vertical.
GridLayout (num_linhas, num_colunas, sep_horiz, sep_vert)
243
h) GridBagLayout
um gerenciador de layout que alinha componentes tanto vertical como
horizontal (pela diviso da tela numa matiz), sem, contudo, exigir que os
componentes tenham o mesmo tamanho, como faz GridLayout.
Cada componente gerenciado por GridBagLayout associado com uma
instncia de GridBagConstraints (restries) que especifica como o componente
posicionado na rea requerida.
i) GroupLayout
um gerenciador de layout que agrupa os componentes de forma
hierrquica,
em
duas
formas:
sequencial
paralela,
dependendo
do
j) MigLayout
k) SpringLayout
245
247
248
249
250
Isto acontece porque o objeto lblSaida da classe Manip_Evento foi declarado dentro
do construtor (Manip_Evento), no sendo enxergado dentro de actionPerformed.
252
e em:
http://download.oracle.com/javase/7/docs/api/index.html
254
255
259
}
class Manipula_Evento implements ActionListener
{
public void actionPerformed (ActionEvent ae)
{
JButton bt = (JButton) ae.getSource();
if (bt == bt1)
lblBotao.setText("Boto 1");
else
lblBotao.setText("Boto 2");
}
}
public Manip_Evento_2() {
getContentPane().setLayout(null);
bt1 = new JButton("Bot\u00E3o 1");
bt1.setBounds(83, 48, 89, 23);
getContentPane().add(bt1);
bt2 = new JButton("Bot\u00E3o 2");
bt2.setBounds(224, 48, 89, 23);
getContentPane().add(bt2);
JLabel lblNewLabel = new JLabel("Bot\u00E3o clicado: ");
lblNewLabel.setBounds(119, 116, 70, 14);
getContentPane().add(lblNewLabel);
260
261
D um clique em
262
263
c) Componente JCheckBox:
Crie uma janela contendo 2 componentes JCheckBox, 3 JLabels e 1 JButton:
264
e,
ch2.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent arg0) {
if (ch2.isSelected())
lblGosto.setText(Teatro selecionado");
else
lblGosto.setText(" Teatro no selecionado");
}
});
265
d) Componente JRadioButton:
Adicione um componente JRadioButton. Inclua-o em um grupo (boto direito
do mouse, Set ButtonGroup New standard):
267
268
2.20. Thread
Em determinadas situaes, necessria a execuo de cdigos
diferentes (ou mesmo, vrias instncias do mesmo cdigo) ao mesmo tempo como
quando voc est navegando pela internet simultaneamente a um download
em processamento, ao passo que um relgio, concomitantemente, lhe mostra as
horas.
Para resolver este tipo de problema, cria-se threads, que baseadas nas
mquinas multiprocessadas, executam cada tarefa em diferentes CPUs. Porm,
cada thread dividir o tempo da CPU em funo da prioridade da sua execuo.
Cada thread executada no seu prprio espao de memria. Contudo,
cada thread pode ver os mesmos dados globais que o resto da aplicao, podendo,
inclusive, alter-los,
270
271
/**
* Create the applet.
*/
public Relogio() {
getContentPane().setLayout(null);
lblHora = new JLabel("");
lblHora.setBounds(73, 40, 80, 14);
getContentPane().add(lblHora);
btnNewButton = new JButton("Sair");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
hora = null;
System.exit (0);
}
});
btnNewButton.setBounds(66, 116, 60, 23);
getContentPane().add(btnNewButton);
}
272
// O mtodo start() executado toda vez que um applet inicia sua execuo
public void start ( ) {
if (hora == null) {
hora = new Thread (this);
hora.start ( );
}
}
/* O mtodo run() (interface Runnable) contm os comandos a serem executados em
uma thread */
public void run ( ) {
while (true) {
try {
Thread.sleep (1000);
}
catch (InterruptedException ie) { }
lblHora.setText (getTime ( ));
}
}
273
274
275
277
279
280
2.21. JFrame
Um objeto JFrame uma janela com ttulo e borda, cujo layout default
BorderLayout.
Um objeto JFrame , inicialmente, invisvel. Para torn-lo visvel, invoca-se
o mtodo setVisible (boolean), da classe Component, passando true por parmetro.
Ao terminar de utilizar a janela, o objeto JFrame deve ser destrudo com o
mtodo dispose ( ), o que faz com que todos os componentes contidos no JFrame e
todas as janelas que o pertenam, sejam tambm destrudos.
282
283
285
286
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JLabel;
import java.util.*;
287
/**
* Create the frame.
*/
public Relogio() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 716, 459);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
btnSair.setMnemonic('r');
btnSair.setBounds(297, 320, 89, 23);
contentPane.add(btnSair);
lblTexto = new JLabel("Hor\u00E1rio:");
lblTexto.setBounds(461, 28, 65, 14);
contentPane.add(lblTexto);
lblHora = new JLabel("00:00:00");
lblHora.setBounds(537, 28, 76, 14);
contentPane.add(lblHora);
if (hora == null) {
hora = new Thread(this);
hora.start();
}
if (pisca == null) {
pisca = new Thread(this);
pisca.start();
}
}
290
291
292
2.22. JAR
293
294
Na janela que surge, clique em Java -> Runnable JAR file -> Next:
295
296
297
298
Caso haja algum aviso de advertncia de compilao (warning), uma janela surgir
alertando-o do problema. No caso do exemplo dado, a insero da declarao:
private static final long serialVersionUID
como descrito em "2.19.3.2. Fixao do Problema: no declarao de static final
serialVersionUID" resolveria o problema e evitaria o surgimento dessa janela.
Clique em OK para continuar:
299
Caso haja outros erros, como erros de sintaxe (compile erros), clique em OK,
retorne ao cdigo e corrija todos os erros antes de gerar o arquivo ".jar", pois, do
contrrio, a execuo gerar uma mensagem de erro (Unresolved compilation
problem).
300
301
302
303
304
bt.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Numero<Integer> n = new Numero<Integer>();
n.set(Integer.parseInt(tf1.getText()));
tf2.setText(n.getString());
}
});
No exemplo acima, trabalhou-se com o tipo de dado Integer; porm, o tipo T pode
ser substitudo por qualquer tipo concreto, como Double.
306
: Element (elemento)
: Key (chave)
: Number (nmero)
: Type (tipo)
: Value (valor)
S, U,
: outros tipos
307
2.24. Colees
Colees so objetos que podem armazenar, recuperar e manipular
dados. A interface mais bsica a Collection, que implementa a interface Iterable
(cujo mtodo iterator retorna um objeto iterador para atuar sobre um conjunto de
objetos de tipo T. A interface iterator<E> declara mtodos para percorrer uma
coleo, ou eliminar seus elementos). Estendem Collection as seguintes interfaces:
a. List : Coleo que permite elementos repetidos (como as sequncias na
matemtica).
b. Set : Coleo que no permite elementos repetidos (como os conjuntos na
matemtica).
c. SortedSet : Coleo que no permite elementos repetidos, e que os mantm em
ordem crescente.
d. Queue : Coleo que representa uma fila (FIFO).
e. Deque : Coleo que pode representar uma fila (FIFO) ou uma pilha (LIFO).
308
309
Vrios mtodos das interfaces e classes listados em 2.23 podem ser vistos
na planilha anexa colecoes.xlsx, encontrada no endereo:
http://www.multitecnus.com/java
Documentao mais aprofundada sobre colees pode ser encontrada em:
http://download.oracle.com/javase/6/docs/technotes/guides/collections/index.html
http://download.oracle.com/javase/6/docs/technotes/guides/collections/overview.html
http://docs.oracle.com/javase/7/docs/api/java/util/package-tree.html
311
2.24.1. Algoritmos
So algoritmos polimrficos providos por java na forma de mtodos
estticos, e que, em sua maioria, aplicam-se manipulao de listas.
2.24.1.1. Sort : Ordena os valores de uma lista por meio de merge sort.
ArrayList<String> lista2 = (ArrayList<String>) lista1.clone();
Collections.sort(lista2);
Obs.1: Obter lista2 (clone da lista lista1) ao invs de utilizar a lista original,
preserva a lista original (mantm a ordem de entrada dos elementos
lista).
Obs.2: No ho h o reordenamento de elementos iguais, o que torna a ordenao
rpida e estvel.
312
315
Collections.min (lista);
2.24.1.14. Max : Retorna o maior elemento da lista.
Collections.max (lista);
316
317
listagemEntrada
btnEsvaziaLista
318
btnListaEntrada
btnSort
btnShuffle
btnReverse
listagemSaida
319
rotateIndex
swapPos1
btnRotate
swapPos2
btnSwap
btnReplaceAll
tfNovoValor
tfOcorrencia
320
btnFill
btnBinarySearch
btnIndexOfSubList
btnLastIndexOfSubList
tfFill
tfBinarySearch
tfIndexOfSubList
tfLastIndexOfSubList
321
btnFrequency
btnDisjoint
tfFrequency
tfDisjoint
btnMin
btnMax
btnSair
322
323
324
325
326
2.25. JDBC
Java Database Conectivity , ou JDBC, prov acesso a dados por meio de
rotinas pr-construdas, disponibilizadas ao programador para construir aplicativos.
Trata-se, ento, de uma interface que auxilia a programao de aplicativos (ou API Application Programming Interface).
Com JDBC um sistema Java pode se comunicar com vrios SGBDs
(Sistemas Gerenciadores de Bancos de Dados, ou DBMS Database Management
System), tais como: MySQL, POstgreSQL, Oracle, Microsoft SQL Server, dentre
outros, acessando seus dados para exibio ou manipulao.
No endereo: http://docs.oracle.com/javase/tutorial/jdbc/basics/index.html h
um tutorial completo sobre a API JDBC.
329
2.25.1. MySQL
MySQL um SGBD multiplataforma, possuindo uma verso sob licena
GPL (free), e uma verso Entreprise Edition (paga).
Com o MySQL pode-se criar bancos de dados relacionais, utilizar
conceitos de transao, executar stored procedures (procedimentos armazenados)
e funes, alm de triggers.
Para que os exerccios aqui deem certo, faa o download do aplicativo
EasyPHP, que instala o MySQL (alm de um interpretador para a linguagem PHP,
que no ser objeto de estudo neste material). Uma vez instalado, v ao navegador
e acesse o endereo: http://127.0.0.1/home/mysql/ . No MySQL, crie um banco
de dados de nome "dbTeste" e, nele, crie a tabela "teste" contendo o campo
"nome" (VARCHAR; 30; PRIMARY).
330
331
Clicar em Add...
332
333
334
336
337
j) Clicar em OK:
338
339
340
b) Insira o driver JDBC para MySQL. Para tal, clicar com o boto direito sobre o
projeto; em seguida, clicar em Build Path -> Configure Build Path:
341
342
344
345
346
while( retorno.next() )
{
String nome = retorno.getString( "nome" );
textArea.append(nome + "\n");
}
}
catch( SQLException e )
{
System.out.println( "SQLException: " + e.getMessage() );
System.out.println( "SQLState: " + e.getSQLState() );
System.out.println( "VendorError: " + e.getErrorCode() );
}
}
catch( Exception e )
{
System.out.println( e.getMessage() );
e.printStackTrace();
System.out.println( "Se no existir, crie o banco de dados: \"teste\"");
}
348
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.beans.Statement;
i) Executar.
349
canRead( ) : Retorna true se o arquivo especificado pelo objeto File existe e pode
ser lido. Deve ser usado com SecurityException num bloco try/catch.
canWrite( ) : Retorna true se o arquivo especificado pelo objeto File pode sofrer
escrita. Deve ser usado com SecurityException num bloco try/catch.
350
delete( ) : Apaga o arquivo especificado pelo objeto File. Deve ser usado com
SecurityException num bloco try/catch.
exists( ) : Retorna true se o arquivo especificado pelo objeto File existe. Deve ser
usado com SecurityException num bloco try/catch.
getName( ) : Retorna uma String contendo o nome (sem o diretrio) do arquivo
especificado pelo objeto File.
getPath( ) : Retorna uma String contendo o caminho (path) onde est localizado o
arquivo representado pelo objeto File.
IsFile( ) : Retorna true se o arquivo especificado pelo objeto File um arquivo
normal (no um diretrio, por exemplo). Deve ser usado com
SecurityException num bloco try/catch.
351
2.26.1. FileInputStream
close( ) : Fecha o arquivo e libera quaisquer recursos associados. Deve ser chamado
com IOException num bloco try/catch.
read(byte b[ ]) : L o total de bytes especificados por b.length, retornando quantos
bytes foram lidos, ou 1 se o fim de arquivo foi alcanado. Deve ser
chamado com IOException num bloco try/catch.
354
2.26.2. FileOutputStream
355
356
358
Obs.1: H duas classes JFileChooser e FileDialog, que permitem obter os nomes dos
arquivos origem e destino, facilitando o trabalho de cpia de arquivos. Por
exemplo, para obter o nome do arquivo origem:
fc = new JFileChooser();
fc.setDialogTitle(Copiar de");
boolean ok = fc.showOpenDialog(frame) == JFileChooser.APPROVE_OPTION;
E, para salvar:
FileDialog fd = new FileDialog(frame,"Copiar para",FileDialog.SAVE);
fd.setVisible(true);
arq_novo = fd.getDirectory()+fd.getFile();
Onde frame, em ambos os cdigos, o objeto pai da janela de dilogo.
359
Obs. 2: Pode-se utilizar as classes como no exemplo dado, bem como, pode-se utilizar
somente uma delas, isto , ou s utilizar FileChooser, ou s utilizar FileDialog:
a) FileChooser
a.1) Carregar o arquivo: FileChooser.showOpenDialog
a.2) Salvar o arquivo
: FileChooser.showSaveDialog
b) FileDialog
b.1) Carregar o arquivo: FileDialog(frame,"Copiar para",FileDialog.OPEN);
b.2) Salvar o arquivo
: FileDialog(frame,"Copiar para",FileDialog.SAVE);
Para exemplificar, construa uma janela contendo dois JButton e um JProgressBar (altere a
propriedade stringPainted do JProgressBar para true, para aparecer o valor dentro da
barra de progresso):
2.27. Serializao
Um objeto deve ser serializado, quando se tem a necessidade de
armazen-lo em uma stream, com seu estado correto e todos os seus campos.
O conceito de armazenar um objeto no seu estado corrente no novo,
e, s vezes, refere-se a isto como sendo a persistncia do objeto.
Para poder serializar uma classe, devemos implementar a interface
Serializable.
A interface Serializable utilizada para definir a representao de um
objeto que deve ser transferido para/de uma stream.
362
363
365
ce = new ClasseExterna ( );
ce.varExterna = false;
}
public void escreve ( )
{
System.out.println ("Arquivo recuperado!");
}
class ClasseInterna implements Serializable
{
boolean varInterna;
}
}
366
369
Login = Jose
Valor1 = 0
Valor2 = 456
Valor3 = 789
Valor4 = A
Valor5 = Alo Voce!
Arquivo recuperado!
ci.varInterna = true
ce.varExterna = false
370
2.28. Anotaes
Anotaes (Annotations) so metadados que auxiliam o compilador,
documentando o cdigo-fonte. Ao contrrio dos comentrios, anotaes podem
ser processadas por ferramentas automticas, apresentando informao de forma
clara e padronizada. Permitem ao desenvolver marcar classes e mtodos, sem,
contudo, fazer parte do cdigo.
Declara-se um tipo de anotao com a seguinte sintaxe:
public @interface AnotacaoNome
{
tipo atributoDeAnotao1();
tipo atributoDeAnotao2();
}
371
373
1) Deprecated
Pacote: java.lang
Funo: Um elemento que recebe essa anotao tem seu uso desencorajado.
2) Documented
Pacote: java.lang.annotation
Funo: Indica que a anotao ser documentada por javadoc.
375
3) Override
Pacote: java.lang
Funo: utilizada quando o mtodo da subclasse deve sobrescrever o mtodo da
superclasse utilizando a mesma assinatura, ou seja, mesmo tipo de retorno, mesmo
nome e os mesmos parmetros (quantidade, nomes e tipos). Os blocos de comando
que os mtodos definem podem ser diferentes, mas as assinaturas devem ser as
mesmas.
4) Inherited
Pacote: java.lang.annotation
Funo: Indica que a anotao ser herdada.
376
5) Retention
Pacote: java.lang.annotation
Funo: Indica o tempo de reteno da anotao.
Elemento requerido: RetentionPolicy value
6) SuppresWarnings
Pacote: java.lang
Funo: As mensagens de advertncia devem ser suprimidas para o elemento anotado.
Elemento requerido: String[] value
Obs: Alguns valores vlidos para value:
all : suprime todos as mensagens de advertncia
Boxing : suprime mensagens de advertncia relativas a processos de converso de
empacotamento (boxing/unboxing), quando um elemento convertido para
sua classe (int para Integer, por exemplo), e vice-versa
cast : suprime mensagens de advertncia relativas a operaes de converso (int para
float, por exemplo)
378
379
7) Target
Pacote: java.lang.annotation
Funo: Indica para quais elementos a anotao ser aplicvel.
Elemento requerido: ElementType[] value
Lista-se abaixo os valores do tipo ElementType vlidos e os respectivos locais onde
utilizar a anotao:
ANNOTATION_TYPE : antes da declarao de anotaes (public @interface)
CONSTRUCTOR : antes de um mtodo construtor
FIELD : antes de atributo (incluindo constantes enumeradas)
LOCAL_VARIABLE : antes da declarao de variveis locais
METHOD : antes da declarao de mtodos
PACKAGE : antes da declarao de pacotes no arquivo package-info.java
PARAMETER : antes da declarao de parmetros
TYPE : antes da declarao de classes, interfaces, anotaes ou tipos enumerados
380
Obs.: O arquivo package-info.java deve conter o nome do pacote do qual ele faz parte.
Por exemplo, se o nome do pacote for com.multitecnus.anotacoes o mesmo
dever conter o seguinte:
package com.multitecnus.anotacoes;
381
@Documented
@Retention(RetentionPolicy.CLASS)
@Target(ElementType.TYPE)
public @interface Autoria {
String autor();
String data();
double versao() default 1.0;
}
382
package com.multitecnus.anotacoes;
import java.lang.SuppressWarnings;
@SuppressWarnings( { "all" } )
@Autoria
(
autor = "Multitecnus" ,
data = "15/03/2011"
)
public class UsaAnotacoes {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println ("Exemplo de uso de annotation");
}
}
383
384
2.29.1. Meta-informao
385
Esses dados so de difcil visualizao. Alm disso, pode-se fazer uma simples
pergunta, sem se obter resposta satisfatria: Carlos primeiro ou segundo nome,
ou seja, trata-se algum chamado Carlos Antnio ou Antnio Carlos?
Esta dificuldade leva ao conceito de METAINFORMAO, ou, dados que
descrevem um conjunto de informaes e que do significado a ele.
Assim, o conceito por trs da XML o de produzir metainformao e
fornec-la a um computador, de tal sorte que este processe as informaes sobre
os dados maneira mais slida.
Bancos de dados trabalham com o conceito de metainformao. Por
exemplo, para armazenar os dados listados anteriormente numa tabela, esta teria
que ter uma estrutura parecida com: SEGUNDO_NOME, PRIMEIRO_NOME, RUA,
CIDADE, TELEFONE.
387
389
2.29.2. Regras
391
392
394
Salvando-se os arquivos como: horario.xml e horario.dtd, respectivamente, podese referenciar o documento DTD no arquivo XML:
395
- dois pontos ( : )
- hfen ( - )
- trao sublinhado ( _ )
O tipo do contedo declarado aps o nome, e pode ser um elemento pode ser
atmicos (ou so vazios ou possuem somente texto) ou complexos (possuem
somente elementos filhos, ou possuem texto e elementos filhos misturados).
396
398
O elemento autor pode aparecer vrias vezes seguidas (a publicao pode ter
mais de um autor)
Exemplo no DTD:
403
406
boolean
anyURI
language
int
integer
long
float
date
time
dateTime
Para que isso seja evitado, pode-se definir um namespace, que possui um
escopo onde podem ser declarados nomes, tipos e demais definies tpicas para
aquele namespace.
A definio de um namespace permite que regras diferentes sejam
aplicveis ao schema. No caso do exemplo dado, o namespace utilizado tem como
nome "xsd":
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
Mais detalhes sobre XML Schema podem ser encontrados na W3C, no endereo:
http://www.w3.org/XML/Schema
409
410
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Alunos {
@XmlElement
public void setName(String name) {
this.name = name;
}
int id;
String name;
String matricula;
@XmlElement
public void setMatricula(String matricula) {
this.matricula = matricula;
}
}
411
412
Referncia Bibliogrfica
- DEITEL, P. ; Deitel, H. Java: como programar. So Paulo: Person, Prentice Hall, 2010.
- ARNOLD, K. ; GOSLING, J. ; HOMES, D. A linguagem de programao Java. Porto
Alegre: Bookman, 2007.
- DEITEL, H. M. ; Deitel, P. J. ; NIETO, T.R. Internet & world wide web, como programar.
Porto Alegre: Bookman, 2003.
- LIBERTY, J. ; KRALEY, M. Desenvolver documentos xml para a web. So Paulo: Makron
Books, 2001.
- FARIA, R. A. Treinamento avanado em xml. So Paulo: Digerati Books, 2005.
- GUEDES, G. T. A. UML 2: uma abordagem prtica. So Paulo: Novatec Editora, 2011.
415
Grupo Multitecnus
http://www.multitecnus.com
multitecnus@multitecnus.com
416