You are on page 1of 282

Programao Java SE 7

Guia do Aluno Volume I


D67238BP20
Edio 2.0
Abril de 2012
D77012
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Aviso de iseno
Este documento contm informaes de propriedade e protegido por leis de
direitos autorais e outras leis de propriedade intelectual. Voc pode copiar e imprimir
este documento exclusivamente para uso pessoal em um curso de treinamento da
Oracle. O documento no pode ser modificado ou alterado de forma alguma. Exceto
onde seu uso constitudo como "uso justo" sob a lei de direitos autorais, voc no
pode usar, compartilhar, baixar, fazer upload, copiar, imprimir, exibir, fazer uso,
reproduzir, publicar, licenciar, divulgar, transmitir nem distribuir este documento por
completo ou parcialmente sem a expressa autorizao da Oracle.
As informaes contidas neste documento esto sujeitas a alteraes sem aviso
prvio. Caso encontre quaisquer problemas no documento, relate-os por escrito para:
Oracle University, 500 Oracle Parkway, Redwood Shores, California 94065 USA.
Este documento no garante a iseno de erros.
Aviso sobre Direitos Restritos
Se essa documentao for entregue ao governo dos Estados Unidos ou a qualquer
pessoa que esteja utilizando o documento em nome do governo dos Estados Unidos,
o seguinte aviso ser aplicvel:
DIREITOS GOVERNAMENTAIS DOS EUA
Os direitos de uso, modificao, reproduo, liberao, execuo, exibio ou
divulgao do governo dos Estados Unidos destes materiais de treinamento so
restritos pelos termos do contrato de licena da Oracle aplicvel e/ou do contrato do
governo dos Estados Unidos aplicvel.
Aviso de Marca Comercial
Oracle e Java so marcas registradas da Oracle e/ou de suas afiliadas. Outros
nomes podem ser marcas comerciais de seus respectivos proprietrios.
Autores
Michael Williams
Tom McGinn
Matt Heimer
Colaboradores e
Revisores Tcnicos
Lee Klement
Steve Watts
Brian Earl
Vasily Strelnikov
Andy Smith
Nancy K.A.N
Chris Lamb
Todd Lowry
Ionut Radu
Joe Darcy
Brian Goetz
Alan Bateman
David Holmes
Editores
Richard Wallis
Daniel Milne
Vijayalakshmi Narasimhan
Designer Grfico
James Hans
Publicadores
Syed Imtiaz Ali
Sumesh Koshy
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Sumrio


1 Introduo
Objetivos do Curso 1-2
Objetivos do Curso 1-3
Pblico 1-5
Pr-requisitos 1-6
Apresentaes da Turma 1-7
Ambiente do Curso 1-8
Os Programas Java So Independentes de Plataforma 1-9
Grupos de Produtos de Tecnologia Java 1-10
Verses da Plataforma Java SE 1-11
Fazendo Download e Instalando o JDK 1-12
Java em Ambientes de Servidor 1-13
A Comunidade Java 1-14
O JCP (Java Community Process) 1-15
OpenJDK 1-16
Oracle Java SE Support 1-17
Recursos Adicionais 1-18
Resumo 1-19

2 Reviso de Sintaxe e Classe Java
Objetivos 2-2
Reviso da Linguagem Java 2-3
Estrutura de Classe 2-4
Uma Classe Simples 2-5
Blocos de Cdigo 2-6
Tipos de Dados Primitivos 2-7
Literais Numricos do Java SE 7 2-9
Literais Binrios do Java SE 7 2-10
Operadores 2-11
Strings 2-12
Operaes de String 2-13
if else 2-14
Operadores Lgicos 2-15
Arrays e Loop for-each 2-16
Loop for 2-17
Loop while 2-18
Instruo switch com String 2-19
Convenes de Nomeao Java 2-20
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Uma Classe Java Simples: Employee 2-21
Mtodos de Classe Employee 2-22
Criando uma Instncia de um Objeto 2-23
Construtores 2-24
Instruo package 2-25
Instrues import 2-26
Mais sobre import 2-27
Java Valor por Passagem 2-28
Valor por Passagem para Referncias de Objeto 2-29
Objetos Especificados como Parmetros 2-30
Como Compilar e Executar 2-31
Compilando e Executando: Exemplo 2-32
Carregador de Classe Java 2-33
Coleta de Lixo 2-34
Resumo 2-35
Quiz 2-36
Exerccio 2-1 Viso Geral: Criando Classes Java 2-39

3 Encapsulamento e Criao de Subclasses
Objetivos 3-2
Encapsulamento 3-3
Encapsulamento: Exemplo 3-4
Encapsulamento: Dados Privados, Mtodos Pblicos 3-5
Modificadores de Acesso Pblicos e Privados 3-6
Revisitando "Employee" 3-7
Nomeao de Mtodos: Melhores Prticas 3-8
Refinamento da Classe Employee 3-9
Tornar Classes o Mais Imutveis Possvel 3-10
Criando Subclasses 3-11
Criao de Subclasses 3-12
Subclasse Manager 3-13
Construtores No So Herdados 3-14
Usando super 3-15
Construindo um Objeto Manager 3-16
O Que Polimorfismo? 3-17
Sobrecarga de Mtodos 3-18
Mtodos Que Usam Argumentos Variveis 3-19
Herana nica 3-21
Resumo 3-22
Quiz 3-23
Exerccio 3-1 Viso Geral: Criando Subclasses 3-27
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
(Opcional) Exerccio 3-2 Viso Geral: Adicionando um Funcionrio
a um Gerente 3-28

4 Design de Classe Java
Objetivos 4-2
Usando Controle de Acesso 4-3
Controle de Acesso Protegido: Exemplo 4-4
Cpia de Sombra de Campo: Exemplo 4-5
Controle de Acesso: Prtica Recomendada 4-6
Substituindo Mtodos 4-7
Chamando um Mtodo Substitudo 4-9
Chamada de Mtodo Virtual 4-10
Acessibilidade de Mtodos Substitudos 4-11
Aplicando o Polimorfismo 4-12
Usando a Palavra-chave instanceof 4-14
Converso de Referncias de Objeto 4-15
Regras de Converso 4-16
Substituindo Mtodos de Objeto 4-18
Mtodo Object toString 4-19
Mtodo Object equals 4-20
Substituindo equals em Employee 4-21
Substituindo Object hashCode 4-22
Resumo 4-23
Quiz 4-24
Exerccio 4-1 Viso Geral: Substituindo Mtodos e Aplicando Polimorfismo 4-28

5 Design de Classe Avanado
Objetivos 5-2
Modelando Problemas de Negcios com Classes 5-3
Permitindo Generalizao 5-4
Identificando a Necessidade de Classes Abstratas 5-5
Definindo Classes Abstratas 5-6
Definindo Mtodos Abstratos 5-7
Validando Classes Abstratas 5-8
Quiz 5-9
Palavra-chave static 5-10
Mtodos Estticos 5-11
Implementando Mtodos Estticos 5-12
Chamando Mtodos Estticos 5-13
Variveis Estticas 5-14
Definindo Variveis Estticas 5-15
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Usando Variveis Estticas 5-16
Importaes Estticas 5-17
Quiz 5-18
Mtodos Finais 5-19
Classes Finais 5-20
Variveis Finais 5-21
Declarando Variveis Finais 5-22
Quiz 5-23
Quando Evitar Constantes 5-24
Enumeraes Typesafe 5-25
Uso de Enumerao 5-26
Enumeraes Complexas 5-27
Quiz 5-28
Padres de Design 5-29
Padro Singleton 5-30
Classes Aninhadas 5-31
Classe Interna: Exemplo 5-32
Classes Internas Annimas 5-33
Quiz 5-34
Resumo 5-35
Exerccio 5-1 Viso Geral: Aplicando a Palavra-chave Abstrata 5-36
Exerccio 5-2 Viso Geral: Aplicando o Padro de Design Singleton 5-37
Exerccio 5-3 Viso Geral: (Opcional) Usando Enumeraes Java 5-38
(Opcional) Exerccio 5-4 Viso Geral: Reconhecendo Classes Aninhadas 5-39

6 Herana com Interfaces Java
Objetivos 6-2
Substituio de Implementao 6-3
Interfaces Java 6-4
Desenvolvendo Interfaces Java 6-5
Campos de Constante 6-6
Referncias de Interface 6-7
Operador instanceof 6-8
Interfaces Marcadoras 6-9
Fazendo a Converso em Tipos de Interface 6-10
Usando Tipos de Referncia Genricos 6-11
Implementando e Estendendo 6-12
Estendendo Interfaces 6-13
Interfaces em Hierarquias de Herana 6-14
Quiz 6-15
Padres de Design e Interfaces 6-16
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Padro DAO 6-17
Antes do Padro DAO 6-18
Depois do Padro DAO 6-19
A Necessidade do Padro Factory 6-20
Usando o Padro Factory 6-21
O Mtodo Factory 6-22
DAO e Factory Juntos 6-23
Quiz 6-24
Reutilizao de Cdigo 6-25
Dificuldades de Design 6-26
Composio 6-27
Implementao da Composio 6-28
Polimorfismo e Composio 6-29
Quiz 6-31
Resumo 6-32
Exerccio 6-1 Viso Geral: Implementando uma Interface 6-33
Exerccio 6-2 Viso Geral: Aplicando o Padro DAO 6-34
(Opcional) Exerccio 6-3 Viso Geral: Implementando a Composio 6-35

7 Genricos e Colees
Objetivos 7-2
Genricos 7-3
Classe de Cache Simples sem Genricos 7-4
Classe de Cache Genrica 7-5
Genricos em Ao 7-6
Genricos com Inferncia de Tipos (Operador Diamante) 7-7
Quiz 7-8
Colees 7-9
Tipos de Coleo 7-10
Interface List 7-11
Classe de Implementao ArrayList 7-12
ArrayList Sem Genricos 7-13
ArrayList Genrica 7-14
ArrayList Genrica: Iterao e Boxing 7-15
Autoboxing e Unboxing 7-16
Quiz 7-17
Interface Set 7-18
Interface Set: Exemplo 7-19
Interface Map 7-20
Tipos Map 7-21
Interface Map: Exemplo 7-22
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Interface Deque 7-23
Pilha com Deque: Exemplo 7-24
Ordenando Colees 7-25
Interface Comparable 7-26
Comparable: Exemplo 7-27
Teste de Comparable: Exemplo 7-28
Interface Comparator 7-29
Comparator: Exemplo 7-30
Teste de Comparator: Exemplo 7-31
Quiz 7-32
Resumo 7-33
Exerccio 7-1 Viso Geral: Contando Nmeros de Pea por Meio de um
HashMap 7-34
Exerccio 7-2 Viso Geral: Fazendo a Correspondncia de Parnteses Usando
um Deque 7-35
Exerccio 7-3 Viso Geral: Contando Estoque e Classificando com
Comparators 7-36

8 Processamento de String
Objetivos 8-2
Argumentos de Linha de Comando 8-3
Propriedades 8-5
Carregando e Usando um Arquivo de Propriedades 8-6
Carregando Propriedades a Partir da Linha de Comando 8-7
PrintWriter e a Console 8-8
Formato printf 8-9
Quiz 8-10
Processamento de String 8-11
StringBuilder e StringBuffer 8-12
StringBuilder: Exemplo 8-13
Amostra de Mtodos de String 8-14
Usando o Mtodo split() 8-15
Analisando com StringTokenizer 8-16
Scanner 8-17
Expresses Regulares 8-18
Pattern e Matcher 8-19
Classes de Caractere 8-20
Classe de Caractere: Exemplos 8-21
Cdigo da Classe de Caractere: Exemplos 8-22
Classes de Caractere Predefinidas 8-23
Classe de Caractere Predefinida: Exemplos 8-24
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Quantificadores 8-25
Quantificador: Exemplos 8-26
Voracidade 8-27
Quiz 8-28
Objetos Matcher de Limite 8-29
Limite: Exemplos 8-30
Quiz 8-31
Correspondncia e Grupos 8-32
Usando o Mtodo replaceAll 8-33
Resumo 8-34
Exerccio 8-1 Viso Geral: Analisando Texto com split() 8-35
Exerccio 8-2 Viso Geral: Criando um Programa de Pesquisa de Expresso
Regular 8-36
Exerccio 8-3 Viso Geral: Transformando HTML com Expresses
Regulares 8-37

9 Excees e Asseres
Objetivos 9-2
Tratamento de Erros 9-3
Tratamento de Exceo na Java 9-4
A Instruo try-catch 9-5
Objetos de Exceo 9-6
Categorias de Exceo 9-7
Quiz 9-8
Tratando Excees 9-10
A Clusula finally 9-11
A Instruo try-with-resources 9-12
Excees Suprimidas 9-13
A Interface AutoCloseable 9-14
Capturando Vrias Excees 9-15
Declarando Excees 9-16
Tratando Excees Declaradas 9-17
Lanando Excees 9-18
Excees Personalizadas 9-19
Quiz 9-20
Excees Encapsuladoras 9-21
Revisitando o Padro DAO 9-22
Asseres 9-23
Sintaxe da Assero 9-24
Invariantes Internas 9-25
Invariantes de Fluxo de Controle 9-26
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Ps-condies e Invariantes de Classe 9-27
Controlando a Avaliao de Asseres em Runtime 9-28
Quiz 9-29
Resumo 9-30
Exerccio 9-1 Viso Geral: Capturando Excees 9-31
Exerccio 9-2 Viso Geral: Estendendo Exception 9-32

10 Fundamentos de E/S da Java
Objetivos 10-2
Noes Bsicas da E/S da Java 10-3
Fluxos de E/S 10-4
Aplicao de E/S 10-5
Dados Dentro de Fluxos 10-6
Mtodos InputStream de Fluxo de Bytes 10-7
Mtodos OutputStream de Fluxo de Bytes 10-9
Exemplo de Fluxo de Bytes 10-10
Mtodos Reader de Fluxo de Caracteres 10-11
Mtodos Writer de Fluxo de Caracteres 10-12
Exemplo de Fluxo de Caracteres 10-13
Encadeamento de Fluxos de E/S 10-14
Exemplo de Fluxos Encadeados 10-15
Processando Fluxos 10-16
E/S de Console 10-17
java.io.Console 10-18
Gravando na Sada Padro 10-19
Lendo na Entrada Padro 10-20
E/S de Canal 10-21
Exerccio 10-1 Viso Geral: Gravando uma Aplicao de E/S de Console
Simples 10-22
Persistncia 10-23
Serializao e Grficos de Objeto 10-24
Campos e Objetos Transientes 10-25
Transient: Exemplo 10-26
UID de Verso Serial 10-27
Exemplo de Serializao 10-28
Gravando e Lendo um Fluxo de Objetos 10-29
Mtodos de Serializao 10-30
Exemplo de readObject 10-31
Resumo 10-32
Quiz 10-33
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Exerccio 10-2 Viso Geral: Serializando e Desserializando um
ShoppingCart 10-37

11 E/S de Arquivo da Java (NIO.2)
Objetivos 11-2
Nova API de E/S de Arquivo (NIO.2) 11-3
Limitaes de java.io.File 11-4
Sistemas de Arquivos, Caminhos, Arquivos 11-5
Caminho Relativo x Caminho Absoluto 11-6
Links Simblicos 11-7
Conceitos do Java NIO.2 11-8
Interface Path 11-9
Recursos da Interface Path 11-10
Caminho: Exemplo 11-11
Removendo Redundncias de um Path 11-12
Criando um Subcaminho 11-13
Unindo Dois Caminhos 11-14
Criando um Caminho Entre os Dois Caminhos 11-15
Trabalhando com Links 11-16
Quiz 11-17
Operaes de File 11-20
Verificando um Arquivo ou Diretrio 11-21
Criando Arquivos e Diretrios 11-23
Deletando um Arquivo ou Diretrio 11-24
Copiando um Arquivo ou Diretrio 11-25
Copiando Entre um Fluxo e um Caminho 11-26
Movendo um Arquivo ou Diretrio 11-27
Listando o Contedo de um Diretrio 11-28
Lendo/Gravando Todos os Bytes ou Linhas em um Arquivo 11-29
Canais e ByteBuffers 11-30
Arquivos de Acesso Aleatrio 11-31
Mtodos de E/S em Buffer para Arquivos de Texto 11-32
Fluxos de Bytes 11-33
Gerenciando Metadados 11-34
Atributos de Arquivo (DOS) 11-35
Atributos de Arquivo DOS: Exemplo 11-36
Permisses da POSIX 11-37
Quiz 11-38
Exerccio 11-1 Viso Geral: Gravando uma Aplicao de Intercalao
de Arquivo 11-41
Operaes Recursivas 11-42
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Ordem de Mtodo FileVisitor 11-43
Exemplo: WalkFileTreeExample 11-46
Localizando Arquivos 11-47
Sintaxe e Padro do PathMatcher 11-48
PathMatcher: Exemplo 11-50
Classe Finder 11-51
Outras Classes teis do NIO.2 11-52
Movendo para NIO.2 11-53
Resumo 11-54
Quiz 11-55
Exerccio 11-2 Viso Geral: Cpia Recursiva 11-58
(Opcional) Exerccio 11-3 Viso Geral: Usando PathMatcher para Deletar
Recursivamente 11-59

12 Threading
Objetivos 12-2
Agendamento de Tarefas 12-3
Por Que o Threading Importante 12-4
A Classe Thread 12-5
Estendendo o Thread 12-6
Iniciando um Thread 12-7
Implementando Runnable 12-8
Executando Instncias de Runnable 12-9
Um Runnable com Dados Compartilhados 12-10
Um Runnable: Vrios Threads 12-11
Quiz 12-12
Problemas com Dados Compartilhados 12-13
Dados No Compartilhados 12-14
Quiz 12-15
Operaes Atmicas 12-16
Execuo Fora da Ordem 12-17
Quiz 12-18
A Palavra-chave volatile 12-19
Parando um Thread 12-20
A Palavra-chave synchronized 12-22
Mtodos synchronized 12-23
Blocos synchronized 12-24
Bloqueio do Monitor de Objeto 12-25
Detectando a Interrupo 12-26
Interrompendo um Thread 12-27
Thread.sleep() 12-28
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Quiz 12-29
Mtodos Thread Adicionais 12-30
Mtodos a Serem Evitados 12-31
Deadlock 12-32
Resumo 12-33
Exerccio 12-1 Viso Geral: Sincronizando o Acesso a Dados
Compartilhados 12-34
Exerccio 12-2 Viso Geral: Implementando um Programa com Vrios
Threads 12-35

13 Concorrncia
Objetivos 13-2
O Pacote java.util.concurrent 13-3
O Pacote java.util.concurrent.atomic 13-4
O Pacote java.util.concurrent.locks 13-5
java.util.concurrent.locks 13-6
Colees de Thread Seguro 13-7
Quiz 13-8
Sincronizadores 13-9
java.util.concurrent.CyclicBarrier 13-10
Alternativas de Threading de Alto Nvel 13-11
java.util.concurrent.ExecutorService 13-12
java.util.concurrent.Callable 13-13
java.util.concurrent.Future 13-14
Desligando um ExecutorService 13-15
Quiz 13-16
E/S Concorrente 13-17
Um Cliente de Rede com Thread nico 13-18
Um Cliente de Rede com Vrios Threads (Parte 1) 13-19
Um Cliente de Rede com Vrios Threads (Parte 2) 13-20
Um Cliente de Rede com Vrios Threads (Parte 3) 13-21
Um Cliente de Rede com Vrios Threads (Parte 4) 13-22
Um Cliente de Rede com Vrios Threads (Parte 5) 13-23
Paralelismo 13-24
Sem Paralelismo 13-25
Paralelismo Ingnuo 13-26
A Necessidade do Framework Fork-Join 13-27
Roubo de Trabalho 13-28
Um Exemplo de Thread nico 13-29
java.util.concurrent.ForkJoinTask<V> 13-30
Exemplo de RecursiveTask 13-31
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Estrutura compute 13-32
Exemplo de compute (Abaixo do Limite) 13-33
Exemplo de compute (Acima do Limite) 13-34
Exemplo de ForkJoinPool 13-35
Recomendaes do Framework Fork-Join 13-36
Quiz 13-37
Resumo 13-38
(Opcional) Exerccio 13-1 Viso Geral: Usando o Pacote
java.util.concurrent 13-39
(Opcional) Exerccio 13-2 Viso Geral: Usando o Framework Fork-Join 13-40

14 Criando Aplicaes de Banco de Dados com JDBC
Objetivos 14-2
Usando a API JDBC 14-3
Usando a Classe Driver de um Fornecedor 14-4
Principais Componentes da API JDBC 14-5
Usando um Objeto ResultSet 14-6
Juntando Tudo 14-7
Gravando Cdigo JDBC Porttil 14-9
A Classe SQLException 14-10
Fechando Objetos JDBC 14-11
A Construo try-with-resources 14-12
try-with-resources: Prtica No Recomendada 14-13
Gravando Consultas e Obtendo Resultados 14-14
Exerccio 14-1 Viso Geral: Trabalhando com o Banco de Dados Derby
e JDBC 14-15
ResultSetMetaData 14-16
Obtendo uma Contagem de Linhas 14-17
Controlando o Tamanho da Extrao de ResultSet 14-18
Usando PreparedStatement 14-19
Usando CallableStatement 14-20
O Que Uma Transao? 14-22
Propriedades ACID de Uma Transao 14-23
Transferindo sem Transaes 14-24
Transferncia Bem-sucedida em Transaes 14-25
Transferncia Malsucedida em Transaes 14-26
Transaes JDBC 14-27
RowSet 1.1: RowSetProvider e RowSetFactory 14-28
Usando RowSetFactory de RowSet 1.1 14-29
Exemplo: Usando JdbcRowSet 14-31
Objetos de Acesso a Dados 14-32
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
O Padro do Objeto de Acesso a Dados 14-33
Resumo 14-34
Quiz 14-35
Exerccio 14-2 Viso Geral: Usando o Padro do Objeto de Acesso
a Dados 14-39

15 Localizao
Objetivos 15-2
Por Que Localizar? 15-3
Uma Aplicao de Amostra 15-4
Locale 15-5
Resource Bundle 15-6
Arquivos de Resource Bundle 15-7
Arquivos de Resource Bundle de Amostra 15-8
Quiz 15-9
Inicializando a Aplicao de Amostra 15-10
Aplicao de Amostra: Loop Principal 15-11
O Mtodo printMenu 15-12
Alterando a Locale 15-13
Interface de Amostra com Francs 15-14
Formatar Data e Moeda 15-15
Inicializar Data e Moeda 15-16
Exibindo uma Data 15-17
Personalizando uma Data 15-18
Exibindo Moeda 15-19
Quiz 15-20
Resumo 15-21
Exerccio 15-1 Viso Geral: Criando uma Aplicao de Data Localizada 15-22
(Opcional) Exerccio 15-2 Viso Geral: Localizando uma Aplicao JDBC 15-23

A SQL Primer
Objetivos A-2
Usando SQL para Consultar o Banco de Dados A-3
Instrues SQL A-4
Instruo SELECT Bsica A-5
Limitando as Linhas a Serem Selecionadas A-7
Usando a Clusula ORDER BY A-8
Sintaxe da Instruo INSERT A-9
Sintaxe da Instruo UPDATE A-10
Instruo DELETE A-11
Instruo CREATE TABLE A-12
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Definindo Restries A-13
Incluindo Restries A-16
Tipos de Dados A-18
Eliminando uma Tabela A-20
Resumo A-21
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Introduo
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Objetivos do Curso
Este curso abrange as APIs bsicas que voc usa para
criar aplicaes orientadas a objetos com Java. Este curso
tambm aborda o desenvolvimento de programas de
banco de dados com JDBC.
Utilize este curso para desenvolver as suas habilidades na
linguagem Java e se preparar para o exame de
certificao Oracle Certified Professional, Java SE 7
Programmer.
Programao Java SE 7 1 - 2
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Objetivos do Curso
Aps concluir este curso, voc ser capaz de:
Criar aplicaes com tecnologia Java que maximizam os
recursos orientados a objetos da linguagem Java, como
encapsulamento, herana e polimorfismo
Executar uma aplicao Java a partir da linha de comando
Criar aplicaes que usam a estrutura de colees
Implementar tcnicas de manipulao de erros utilizando
a manipulao de excees
Implementar a funcionalidade de entrada/sada (E/S) para
ler e gravar dados e arquivos de texto, bem como
entender os fluxos avanados
de E/S
Programao Java SE 7 1 - 3
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Objetivos do Curso
(continuao)
Manipular arquivos, diretrios e sistemas de arquivos
usando a especificao JDK7 NIO.2
Executar vrias operaes em tabelas de banco de dados,
incluindo criao, leitura, atualizao e excluso, usando a
API JDBC
Processar strings usando vrias expresses regulares
Criar aplicaes multithread de alto desempenho que
evitam deadlock
Localizar aplicaes Java
Programao Java SE 7 1 - 4
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Pblico
O pblico-alvo inclui aqueles usurios que:
Concluram o curso Java SE 7 Fundamentals ou tm
experincia na linguagem Java e so capazes de criar,
compilar e executar programas
Tm experincia com, pelo menos, uma linguagem de
programao
Entendem os princpios da programao orientada a
objetos
Tm experincia em conceitos bsicos de banco de dados
e algum conhecimento de SQL
Programao Java SE 7 1 - 5
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Pr-requisitos
Para concluir este curso com sucesso, voc precisa saber como:
Compilar e executar aplicaes Java
Criar classes Java
Criar instncias de objeto usando a palavra-chave new
Declarar variveis Java primitivas e de referncia
Declarar mtodos Java usando valores e parmetros
de retorno
Usar estruturas condicionais como instrues if e switch
Usar estruturas de loop como loops for, while e do
Declarar e instanciar arrays Java
Usar a Java Platform, Standard Edition API Specification
(Javadocs)
Programao Java SE 7 1 - 6
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Apresentaes da Turma
Apresente-se turma:
Nome
Cargo ou funo
Empresa
Experincia com programao e aplicaes Java
Motivos da participao
Programao Java SE 7 1 - 7
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Ambiente do Curso
Ferramentas Adicionais
Firefox
Java DB
PC de Sala de Aula
Aplicaes Bsicas
JDK 7
NetBeans 7.0.1
Neste curso, os seguintes produtos so previamente instalados para os exerccios das lies:
JDK 7: O Java SE Development Kit inclui o compilador Java de linha de comandos
(javac) e o JRE (Java Runtime Environment), que fornece o comando java
necessrio para executar aplicaes Java.
Firefox: Um Web browser utilizados para exibir a documentao HTML (Javadoc) das
bibliotecas da plataforma Java SE.
NetBeans 7.0.1: O NetBeans IDE uma ferramenta de desenvolvimento de software
gratuita e de cdigo-fonte aberto para profissionais que criam aplicaes Web, desktop,
empresariais e mveis. O NetBeans 7.0.1 oferece suporte total plataforma Java SE 7.
O suporte fornecido pela oferta Development Tools Support da Oracle.
Java DB: Java DB a distribuio suportada pela Oracle do banco de dados de
cdigo-fonte aberto Apache Derby com tecnologia 100%Java. Consiste em SQL
baseado em padres,
fcil de usar, seguro e totalmente transacional, API JDBC e Java EE, porm em verso
reduzida, com apenas 2,5 MB.
Programao Java SE 7 1 - 8
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Os Programas Java So Independentes
de Plataforma
Programas Independentes de Plataforma
As aplicaes de tecnologia Java so desenvolvidas na linguagem de programao Java e
compiladas em Java bytecode. O bytecode executado na plataforma Java. O software que
fornece uma plataforma Java executvel denominado JRE (Java Runtime Environment).
Um compilador, includo no JDK (Java SE Development Kit), utilizado para converter
cdigo-fonte Java em Java bytecode.
Programao Java SE 7 1 - 9
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Grupos de Produtos de Tecnologia Java
Identificando Grupos de Produtos de Tecnologia Java
A Oracle fornece uma linha completa de produtos de tecnologia Java, desde kits que criam
programas baseados na tecnologia Java at ambientes de emulao (testes) para
dispositivos de consumo, como telefones celulares. Conforme indicado na ilustrao, todos
os produtos de tecnologia Java compartilham a base da linguagem Java. Tecnologias Java,
como a JVM (Java Virtual Machine), esto inclusas (de formas distintas) em trs grupos
diferentes de produtos, cada um desenvolvido para atender s necessidades de um
mercado-alvo especfico. A figura ilustra os trs grupos de produtos de tecnologia Java e
seus tipos de dispositivo-alvo.
Entre outras tecnologias Java, cada edio contm um kit de desenvolvimento de
software (SDK) que permite aos programadores criar, compilar e executar programas
de tecnologia Java em uma plataforma especfica:Plataforma Java, Standard Edition
(Java SE): Desenvolve applets e aplicaes que so executadas em Web browsers e
computadores desktop, respectivamente. Por exemplo, possvel usar o Java SE SDK
para criar um programa de processamento de texto para um computador pessoal.
Tambm possvel usar o Java SE para criar uma aplicao que executada em um
browser.
Observao: H vrias diferenas entre os applets e as aplicaes. Basicamente, os applets
so acionados em um Web browser, e as aplicaes so acionadas em um sistema
operacional.
Programao Java SE 7 1 - 10
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Verses da Plataforma Java SE
Ano
Verso de
Desenvolvedor
(JDK)
Plataforma
1996 1.0 1
1997 1.1 1
1998 1.2 2
2000 1.3 2
2002 1.4 2
2004 1.5 5
2006 1.6 6
2011 1.7 7
Como Detectar a Sua Verso
Se o Java SE estiver instalado no seu sistema, ser possvel detectar o nmero da verso
executando java -version. Observe que o comando java est includo no JRE (Java
Runtime Environment). O desenvolvedor tambm pode precisa de um compilador Java,
normalmente javac. O comando javac est includo no JDK (Java SE Development Kit).
necessrio atualizar a varivel PATH do sistema operacional para que inclua a localizao do
javac.
Programao Java SE 7 1 - 11
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
1. Acesse http://www.oracle.com/technetwork/java/javase/downloads/index.html.
2. Escolha o link Java Platform, Standard Edition (Java SE).
3. Faa download da verso apropriada para o seu sistema operacional.
4. Siga as instrues de instalao.
5. Defina a sua varivel PATH.
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Fazendo Download e Instalando o JDK
Programao Java SE 7 1 - 12
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Ambientes Empresariais
Neste curso, voc desenvolve aplicaes Java SE. H padres principais que voc precisa
seguir ao implementar aplicaes Java SE, como, por exemplo, sempre criar um mtodo
main, que pode ser diferente na implementao de aplicaes empresariais. O Java SE
apenas o ponto de partida no seu caminho para se tornar um desenvolvedor Java.
Dependendo das necessidades da sua organizao, voc poder ser solicitado a
desenvolver aplicativos para execuo em servidores de aplicaes Java EE ou em outros
tipos de middleware Java.
Em geral, tambm ser necessrio manipular informaes armazenadas em bancos de
dados relacionais, como MySQL ou Banco de Dados Oracle. Este curso apresenta os
fundamentos da programao de banco de dados.
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Java em Ambientes de Servidor
comum encontrar Java em
ambientes empresariais:
Oracle Fusion Middleware
Servidores de aplicaes
Java
GlassFish
WebLogic
Servidores de banco de
dados
MySQL
Banco de Dados Oracle
Programao Java SE 7 1 - 13
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
O Que a Comunidade Java?
De modo geral, comunidade Java o termo utilizado para se referir s vrias pessoas e
organizaes que desenvolvem, inovam e usam a tecnologia Java. Essa comunidade inclui
desenvolvedores independentes, projetos de cdigo-fonte aberto, organizaes e empresas.
muito comum o download e a utilizao de bibliotecas Java de fontes no pertencentes
Oracle na comunidade Java. Por exemplo, neste curso, voc usa uma biblioteca JDBC
desenvolvida pela Apache para acessar um banco de dados relacional.
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
A Comunidade Java
Aplicaes
Mveis e
Incorporada
s
Apache Software Foundation
Programao Java SE 7 1 - 14
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
JCP.next
O JCP produz as JSRs que descrevem os padres da plataforma Java. O prprio
comportamento do JCP tambm definido e aprimorado por meio do processo JSR. O JCP
est evoluindo e suas melhorias esto definidas na JSR-348, que apresenta alteraes nas
reas de transparncia, participao, agilidade e governana.
Transparncia: possvel que, no passado, alguns aspectos do desenvolvimento de
uma JSR tenham ocorrido a portas fechadas. O desenvolvimento transparente a
prtica recomendada hoje.
Participao: Pessoas e grupos de usurios Java so incentivados a se tornarem
ativos no JCP.
Agilidade: As JSRs lentas no so incentivadas hoje.
Governana: Os grupos de especialistas SE e ME esto se consolidando em uma
nica entidade.
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
O JCP (Java Community Process)
O JCP utilizado para desenvolver novos padres Java:
http://jcp.org
Download gratuito de todas as JSRs (Java Specification
Requests)
Acesso prvio a especificaes
Oportunidades de anlise e comentrios do pblico
Associao aberta
Programao Java SE 7 1 - 15
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Por Que o OpenJDK Importante
Por ter cdigo-fonte aberto, o OpenJDK permite que os usurios transportem cdigo Java
para sistemas operacionais e plataformas de hardware de sua preferncia. Esto sendo
desenvolvidas portas para vrias plataformas (alm daquelas j suportadas), incluindo
FreeBSD, OpenBSD, NetBSD e MacOS X.
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
OpenJDK
OpenJDK a implementao de cdigo-fonte aberto do Java:
http://openjdk.java.net/
Projeto de cdigo-fonte aberto licenciado GPL
Implementao de referncia JDK
Onde novos recursos so desenvolvidos
Aberto a contribuies da comunidade
Base para o Oracle JDK
Programao Java SE 7 1 - 16
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Ainda gratuito
Java (Oracle JDK) est disponvel gratuitamente. A Oracle oferece solues comerciais
avanadas pagas. O programa Java for Business oferecido anteriormente foi substitudo
pelo Oracle Java SE Support, que oferece acesso ao Oracle Premier Support e aos binrios
Oracle Java SE Advanced e Oracle Java SE Suite. Para obter mais informaes, visite
http://www.oracle.com/us/technologies/java/java-se-suite-394230.html.
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Oracle Java SE Support
O Java est disponvel gratuitamente. No entanto, a Oracle
fornece solues Java pagas:
O Java SE Support Program fornece atualizaes
para verses Java fora de linha.
Oracle Java SE Advanced e Oracle Java SE Suite:
JRockit Mission Control
Memory Leak Detection
Low Latency GC (Suite)
JRockit Virtual Edition (Suite)
Programao Java SE 7 1 - 17
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Recursos Adicionais
Tpico Website
Educao e Treinamento http://education.oracle.com
Documentao de Produtos http://www.oracle.com/technology/documentation
Downloads de Produtos http://www.oracle.com/technology/software
Artigos sobre Produtos http://www.oracle.com/technology/pub/articles
Suporte a Produtos http://www.oracle.com/support
Fruns de Produtos http://forums.oracle.com
Tutoriais de Produtos http://www.oracle.com/technetwork/tutorials/index.html
Amostra de Cdigo https://www.samplecode.oracle.com
Oracle Technology Network
for Java Developers
http://www.oracle.com/technetwork/java/index.html
Oracle Learning Library http://www.oracle.com/goto/oll
A tabela do slide lista vrios recursos Web disponveis para voc saber mais sobre
programao Java SE.
Programao Java SE 7 1 - 18
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Resumo
Nesta lio, voc aprendeu:
Os objetivos do curso
O software utilizado neste curso
Plataformas Java (ME, SE e EE)
Nmeros de verso Java SE
Obtendo um JDK
A natureza aberta do Java e sua comunidade
Opes de suporte comercial para o Java SE
Programao Java SE 7 1 - 19
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Reviso de Sintaxe e Classe Java
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Objetivos
Aps concluir esta lio, voc ser capaz de:
Criar classes Java simples
Criar variveis primitivas
Manipular Strings
Usar as instrues de ramificao if-else e switch
Fazer iterao com loops
Criar arrays
Usar campos, construtores e mtodos Java
Usar as instrues package e import
Programao Java SE 7 2 - 2
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Reviso da Linguagem Java
Esta lio uma reviso dos conceitos bsicos de
programao e da linguagem Java. Presume-se que os alunos
estejam familiarizados com os seguintes conceitos:
A estrutura bsica de uma classe Java
Bloco de programa e comentrios
Variveis
Estruturas de ramificao if-else e switch bsicas
Iterao com loops for e while
Programao Java SE 7 2 - 3
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Estrutura de Classe
package <package_name>;
import <other_packages>;
public class ClassName {
<variables(also known as fields)>;
<constructor method(s)>;
<other methods>;
}
Uma classe Java est descrita em um arquivo de texto com uma extenso .java. No
exemplo mostrado, as palavras-chave Java esto destacadas em negrito.
A palavra-chave package define onde essa classe reside em relao a outras classes
e fornece um nvel de controle de acesso. Voc usar modificadores de acesso (como
public e private) posteriormente nesta lio.
A palavra-chave import define outras classes ou grupos de classes que voc est
usando na sua classe. A instruo import ajuda a restringir o que o compilador
precisa procurar ao resolver nomes de classe utilizados nesta classe.
A palavra-chave class precede o nome desta classe. O nome da classe deve
corresponder ao nome do arquivo quando a classe declarada public (o que uma
prtica aconselhvel). No entanto, a palavra-chave public que precede a palavra-
chave class um modificador e no necessria.
As variveis, ou os dados associados a programas (como inteiros, strings, arrays e
referncias a outros objetos), so denominados campos de instncia (geralmente,
abreviados como campos).
Construtores so funes chamada durante a criao (instanciao) de um objeto (uma
representao na memria de uma classe Java).
Mtodos so as funes que podem ser executadas em um objeto. Tambm so
chamados de mtodos de instncia.
Programao Java SE 7 2 - 4
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Uma Classe Simples
Uma classe Java simples com um mtodo principal:
public class Simple{
public static void main(String args[]){
}
}
Para executar um programa Java, necessrio definir um mtodo main como mostra o slide.
O mtodo main chamado automaticamente quando a classe chamada na linha de
comandos.
Os argumentos de linha de comandos so especificados no programa por meio do array
args[].
Observao: Um mtodo que modificado com a palavra-chave static chamado sem
uma referncia a um objeto especfico. utilizado o nome da classe. Esses mtodos so
chamados de mtodos de classe. O mtodo main um mtodo especial que chamado
quando esta classe executada por meio do runtime Java.
Programao Java SE 7 2 - 5
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Blocos de Cdigo
Toda declarao de classe est contida em um bloco de
cdigo.
As declaraes de mtodo esto contidas em blocos de cdigo.
Os campos e mtodos Java tm escopo de bloco (ou classe).
Os blocos de cdigo so definidos entre chaves:
{ }
Exemplo:
public class SayHello {
public static void main(String[] args) {
System.out.println("Hello world");
}
}
Os campos (variveis) e mtodos Java tm um escopo de classe definido entre a chave de
abertura e a de fechamento.
O escopo de classe permite que qualquer mtodo na classe chame qualquer outro mtodo
na classe. O escopo de classe tambm permite que qualquer mtodo acesse qualquer
campo na classe.
Os blocos de cdigo sempre so definidos com chaves {}. Um bloco executado pela
execuo de cada uma das instrues definidas no bloco, da primeira at a ltima (da
esquerda para a direita).
O compilador Java ignora todo espao em branco. O recuo de linha no necessrio, mas
facilita a leitura do cdigo. Neste curso, o recuo de linha tem quatro espaos, que o padro
utilizado pelo NetBeans IDE.
Programao Java SE 7 2 - 6
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Tipos de Dados Primitivos
Acrescente "L" ou "F" maisculo ou minsculo ao nmero para
especificar um nmero do tipo long ou float.
Inteiro Ponto
Flutuante
Caractere Verdadeiro
Falso
byte
short
int
long
float
double
char boolean
1, 2, 3, 42
07
0xff
3.0F
.3337F
4.022E23
'a'
'\u0061'
'\n'
true
false
0 0.0f '\u0000' false
Inteiro
O Java fornece quatro tipos de inteiro para acomodar nmeros de diversos tamanhos. Todos
os tipos numricos tm sinal e, portanto, podem comportar nmeros positivos ou negativos.
Os tipos inteiros tm as seguintes faixas:
a faixa byte de 128 a +127. Nmero de bits = 8.
a faixa short de 32.768 a +32.767. Nmero de bits = 16.
a faixa int de 2.147.483.648 a +2.147.483.647. O tipo de inteiro mais comum
int. Nmero de bits = 32.
a faixa long de 9.223.372.036.854.775.808 a +9.223.372.036.854.775.807. Nmero
de bits = 64.
Ponto Flutuante
Os tipos de ponto flutuante armazenam nmeros com uma parte fracionria e obedecem ao
padro IEEE 754. H dois tipos de ponto flutuante: float e double.
double assim chamado porque fornece o dobro da preciso de float. Um float usa
32 bits para armazenar dados, ao passo que um double usa 64 bits.
Programao Java SE 7 2 - 7
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Caractere
O tipo char utilizado para caracteres individuais, em oposio a uma string de caracteres
(que implementada como um objeto String). O Java oferece suporte a Unicode, um
padro internacional para representar um caractere em qualquer idioma escrito do mundo em
um nico valor de 16 bits. Os primeiros 256 caracteres correspondem ao conjunto de
caracteres ISO Latin 1, do qual uma parte ASCII.
Booleano
O tipo boolean pode armazenar true ou false.
Observao: true e false podem parecer palavras-chave, mas, tecnicamente, so literais
booleanos.
Valores Default
Se um valor no for especificado, ser utilizado um valor default. Os valores em vermelho no
slide so os defaults utilizados. O valor default de char null (representado como
'\u0000'), e o valor default de boolean false.
Observao: Variveis locais (ou seja, variveis declaradas em mtodos) no tm valor
default. Uma tentativa de usar uma varivel local qual no tenha sido atribudo nenhum
valor causar um erro de compilador. aconselhvel sempre fornecer um valor default a
qualquer varivel.
Programao Java SE 7 2 - 8
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Literais Numricos do Java SE 7
No Java SE 7 (e em verses posteriores), no h limite quanto
ao nmero de caracteres de sublinhado (_) entre dgitos em
um campo numrico. Isso pode facilitar a leitura do seu cdigo.
long creditCardNumber = 1234_5678_9012_3456L;
long socialSecurityNumber = 999_99_9999L;
float pi = 3.14_15F;
long hexBytes = 0xFF_EC_DE_5E;
long hexWords = 0xCAFE_BABE;
long maxLong = 0x7fff_ffff_ffff_ffffL;
byte nybbles = 0b0010_0101;
long bytes = 0b11010010_01101001_10010100_10010010;
Regras para Literais
possvel inserir caracteres de sublinhado somente entre dgitos. No possvel inserir esse
caractere nos seguintes locais:
No incio ou fim de umnmero
Adjacente a um ponto decimal em um literal de ponto flutuante
Antes de um sufixo F ou L
Em posies em que esperada uma string de dgitos
Observao: A linguagem Java faz distino entre maisculas e minsculas. Em Java, a
varivel creditCardNumber diferente de CREDITCARDNUMBER. A conveno indica que
os nomes de mtodo e as variveis Java usam camelCase minsculo minscula na
primeira letra do primeiro elemento de um nome de varivel e maiscula na primeira letra dos
elementos subsequentes.
Programao Java SE 7 2 - 9
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Literais Binrios do Java SE 7
No Java SE 7 (e em verses posteriores), tambm possvel
expressar literais binrios usando o sistema binrio
adicionando o prefixo 0b ou 0B ao nmero:
// An 8-bit 'byte' value:
byte aByte = (byte)0b00100001;
// A 16-bit 'short' value:
short aShort = (short)0b1010_0001_0100_0101;
// Some 32-bit 'int' values:
int anInt1 = 0b1010_0001_0100_0101_1010_0001_0100_0101;
int anInt2 = 0b101;
int anInt3 = 0B101; // The B can be upper or lower case.
Literais binrios so valores Java int. Os valores Java byte e short exigem uma
converso para impedir que o compilador emita um aviso de perda de preciso.
Programao Java SE 7 2 - 10
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Operadores
Operador de atribuio simples
= Operador de atribuio simples
Operadores aritmticos
+ Operador de adio (tambm utilizado para concatenao
de strings)
Operador de subtrao
* Operador de multiplicao
/ Operador de diviso
% Operador de resto
Operadores unrios
+ Operador unrio de adio; indica positivo
Operador unrio de subtrao; nega uma expresso
++ Operador de incremento; incrementa um valor em 1
-- Operador de decremento; decrementa um valor em 1
! Operador de complemento lgico; inverte o valor de um booliano
Como foram introduzidos nmeros, o slide mostra uma lista de operadores comuns. A
maioria comum a qualquer linguagem de programao, e o slide fornece uma descrio de
cada um deles.
Os operadores binrios e bitwise foram omitidos por motivo de espao. Para obter dados
sobre esses operadores, consulte o Tutorial Java:
http://download.oracle.com/javase/tutorial/java/nutsandbolts/operators.html
Observao: Os operadores tm precedncia definitiva. Para obter a lista completa, consulte
o link do Tutorial Java mencionado anteriormente. possvel substituir a precedncia usando
parnteses.
Programao Java SE 7 2 - 11
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Strings
1 public class Strings {
2
3 public static void main(String args[]){
4
5 char letter = 'a';
6
7 String string1 = "Hello";
8 String string2 = "World";
9 String string3 = "";
10 String dontDoThis = new String ("Bad Practice");
11
12 string3 = string1 + string2; // Concatenate strings
13
14 System.out.println("Output: " + string3 + " " + letter);
15
16 }
17 }
Os literais de string so
criados automaticamente
como objetos String.
O cdigo mostrado no slide demonstra como os caracteres de texto so representados em
Java. possvel representar caracteres nicos com o tipo char. No entanto, o Java tambm
inclui um tipo String para representar vrios caracteres. As strings podem ser definidas
como mostra o slide e combinadas por meio do sinal + como operador de concatenao.
A sada do cdigo mostrado no slide :
Output: HelloWorld a
Cuidado: As strings sempre devem ser inicializadas pelo operador de atribuio "=" e o texto
entre aspas, como mostram os exemplos. O uso de new para inicializar uma string no
incentivado. O motivo que "Bad Practice" na linha 10 um literal String do tipo
String. O uso da palavra-chave new simplesmente cria outra instncia funcionalmente
idntica ao literal. Se essa instruo tiver ocorrido dentro de um loop que foi chamado com
frequncia, provvel que tenham sido criadas vrias instncias String desnecessrias.
Programao Java SE 7 2 - 12
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Operaes de String
1 public class StringOperations {
2 public static void main(String arg[]){
3 String string2 = "World";
4 String string3 = "";
5
6 string3 = "Hello".concat(string2);
7 System.out.println("string3: " + string3);
8
9 // Get length
10 System.out.println("Length: " + string1.length());
11
12 // Get SubString
13 System.out.println("Sub: " + string3.substring(0, 5));
14
15 // Uppercase
16 System.out.println("Upper: " + string3.toUpperCase());
17 }
18}
Os literais de string
so criados
automaticamente
como objetos String.
Este slide demonstra alguns mtodos de string comuns, que incluem:
concat()
length()
substring()
toUpperCase()
Para saber quais outros mtodos podem ser utilizados em uma String, consulte a
documentao da API.
A sada do programa :
string3: HelloWorld
Length: 5
Sub: Hello
Upper: HELLOWORLD
Observao: String uma classe, no um tipo primitivo. Instncias da classe String
representam sequncias de caracteres Unicode.
Programao Java SE 7 2 - 13
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
if else
1 public class IfElse {
2
3 public static void main(String args[]){
4 long a = 1;
5 long b = 2;
6
7 if (a == b){
8 System.out.println("True");
9 } else {
10 System.out.println("False");
11 }
12
13 }
14 }
O exemplo mostrado no slide demonstra a sintaxe de uma instruo if-else em Java.
A sada do cdigo mostrado no slide a seguinte:
False
Programao Java SE 7 2 - 14
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Operadores Lgicos
Operadores relacionais e de igualdade
== Igual a
!= No igual a
> Maior que
>= Maior que ou igual a
< Menor que
<= Menor que ou igual a
Operadores condicionais
&& E condicional
|| OU condicional
?: Ternrio (abreviatura da instruo if-then-else)
Operadores de comparao de tipo
instanceof Compara um objeto a um tipo especificado
O slide mostra um resumo dos operadores lgicos e condicionais em Java.
Programao Java SE 7 2 - 15
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Arrays e Loop for-each
1 public class ArrayOperations {
2 public static void main(String args[]){
3
4 String[] names = new String[3];
5
6 names[0] = "Blue Shirt";
7 names[1] = "Red Shirt";
8 names[2] = "Black Shirt";
9
10 int[] numbers = {100, 200, 300};
11
12 for (String name:names){
13 System.out.println("Name: " + name);
14 }
15
16 for (int number:numbers){
17 System.out.println("Number: " + number);
18 }
19 }
20 }
Arrays so objetos.
Os objetos array
tm um tamanho de
campo final.
Esta aula mostra como definir arrays em Java. O primeiro exemplo cria um array String e
inicializa cada elemento separadamente. O segundo array int definido em uma nica
instruo.
A iterao de cada array feita por meio da estrutura Java for-each. O loop define um
elemento que representar cada elemento do array e o array pelo qual efetuar o loop. A
sada da classe mostrada aqui:
Name: Blue Shirt
Name: Red Shirt
Name: Black Shirt
Number: 100
Number: 200
Number: 300
Observao: Por default, arrays tambm so objetos. Todos os arrays suportam os mtodos
da classe Object. Sempre possvel obter o tamanho de um array usando seu campo
length.
Programao Java SE 7 2 - 16
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Loop for
1 public class ForLoop {
2
3 public static void main(String args[]){
4
5 for (int i = 0; i < 9; i++ ){
6 System.out.println("i: " + i);
7 }
8
9 }
10 }
O slide mostra o loop for clssico. Um contador inicializado e incrementado para cada
etapa do loop. Quando a instruo de condio atendida, o loop encerrado. Este o
exemplo de sada desse programa:
i: 0
i: 1
i: 2
i: 3
i: 4
i: 5
i: 6
i: 7
i: 8
Programao Java SE 7 2 - 17
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Loop while
1 public class WhileLoop {
2
3 public static void main(String args[]){
4
5 int i = 0;
6 int[] numbers = {100, 200, 300};
7
8 while (i < numbers.length ){
9 System.out.println("Number: " + numbers[i]);
10 i++;
11 }
12 }
13 }
O loop while executar um teste e continuar se a expresso for avaliada como true. O
loop while, mostrado aqui, faz a iterao em um array usando um contador. Esta a sada
do cdigo mostrado no slide:
Number: 100
Number: 200
Number: 300
Observao: Tambm h um loop do-while, em que o teste aps a expresso foi
executado pelo menos uma vez:
class DoWhileDemo {
public static void main(String[] args){
int count = 1;
do {
System.out.println("Count is: " + count);
count++;
} while (count <= 11);
}
}
Programao Java SE 7 2 - 18
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Instruo switch com String
1 public class SwitchStringStatement {
2 public static void main(String args[]){
3
4 String color = "Blue";
5 String shirt = " Shirt";
6
7 switch (color){
8 case "Blue":
9 shirt = "Blue" + shirt;
10 break;
11 case "Red":
12 shirt = "Red" + shirt;
13 break;
14 default:
15 shirt = "White" + shirt;
16 }
17
18 System.out.println("Shirt type: " + shirt);
19 }
20 }
Esse exemplo mostra uma instruo switch em Java usando String. Antes da verso 7 do
Java, somente era possvel usar enumeraes e tipos de dados primitivos byte, short,
char e int em uma instruo switch. Voc ver enumeraes na lio Design de Classe
Avanado.
Programao Java SE 7 2 - 19
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Convenes de Nomeao Java
1 public class CreditCard {
2 public int VISA = 5001;
3 public String accountName;
4 public String cardNumber;
5 public Date expDate;
6
7 public double getCharges(){
8 // ...
9 }
10
11 public void disputeCharge(String chargeId, float amount){
12 // ...
13 }
14}
Nomes de classe so
substantivos em CamelCase
maisculo.
As constantes devem ser
declaradas em letras maisculas.
Os nomes de varivel so
curtos, mas significativos, em
camelCase minsculo.
Os mtodos devem ser
verbos, em camelCase
minsculo.
Os nomes de classe devem ser substantivos em caixa mista, com a primeira letra de
cada palavra maiscula. Essa abordagem chamada de CamelCase maisculo.
Os mtodos devem ser verbos em caixa mista, com a primeira letra minscula e a
primeira letra de cada palavra maiscula. Essa abordagem chamada de camelCase
minsculo.
Os nomes de varivel devem ser curtos, mas significativos. A escolha de um nome de
varivel deve ser mnemnica: criado para indicar a qualquer observador a inteno de
sua utilizao.
Nomes de varivel com apenas um caractere devem ser evitados, exceto como
variveis temporrias "que sero jogadas fora".
As constantes devem ser declaradas usando apenas letras maisculas.
Para obter o documento completo Code Conventions for the Java Programming Language,
acesse http://www.oracle.com/technetwork/java/codeconv-138413.html.
Programao Java SE 7 2 - 20
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Uma Classe Java Simples: Employee
Em geral, uma classe Java utilizada para representar um
conceito.
1 package com.example.domain;
2 public class Employee {
3 public int empId;
4 public String name;
5 public String ssn;
6 public double salary;
7
8 public Employee () {
9 }
10
11 public int getEmpId () {
12 return empId;
13 }
14 }
um construtor
campos
um mtodo
declarao de classe
Uma classe Java utilizada, geralmente, para armazenar ou representar dados para a
estrutura que a classe representa. Por exemplo, possvel criar um modelo (uma
representao programtica) de um funcionrio. Um objeto Employee definido por meio
desse modelo conter valores para empId, name, nmero de seguro social (ssn) e salary.
O mtodo construtor nessa classe cria uma instncia de um objeto denominado Employee.
Um mtodo construtor exclusivo em Java, pois o tipo de retorno do mtodo uma instncia
da classe. Por isso, os construtores sempre tm o mesmo nome que a classe e no declaram
um tipo de retorno. possvel declarar mais de um construtor, como ser mostrado na lio
Design de Classe Java.
Programao Java SE 7 2 - 21
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Mtodos de Classe Employee
Quando uma classe tem campos de dados, uma prtica
comum fornecer mtodos para armazenar dados (mtodos
setter) e recuperar dados (mtodos getter) dos campos.
1 package com.example.domain;
2 public class Employee {
3 public int empId;
4 // other fields...
5 public void setEmpId(int empId) {
6 this.empId = empId;
7 }
8 public int getEmpId() {
9 return empId;
10 }
11 // getter/setter methods for other fields...
12 }
Em geral, um par de
mtodos para definir e
obter o valor de campo
atual.
Adicionando Mtodo Classe Employee
Uma prtica comum criar um conjunto de mtodos que manipulam dados de campo:
mtodos que definem o valor de cada campo e mtodos que obtm esse valor. Esses
mtodos so chamados de accessors (getters) e mutators (setters).
A conveno usar set e get, acrescidos do nome do campo com a primeira letra
maiscula (camelCase minsculo). A maioria dos IDEs (Integrated Development
Environments) modernos oferece uma maneira rpida de gerar automaticamente os mtodos
accessor (getter) e mutator (setter).
Observe que os mtodos set usam a palavra-chave this. A palavra-chave this permite que
o compilador distinga entre o nome do campo da classe (this) e o nome do parmetro que
est sendo especificado como um argumento. Sem a palavra-chave this, o compilador
reclamaria: "Assignment to self".
Nesse exemplo simples, possvel usar o mtodo setName para alterar o nome do
funcionrio e o mtodo setSalary para alterar o salrio (salary) do funcionrio.
Programao Java SE 7 2 - 22
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Criando uma Instncia de um Objeto
Para construir ou criar uma instncia (objeto) da classe
Employee, use a palavra-chave new.
/* In some other class, or a main method */
Employee emp = new Employee();
emp.empId = 101; // legal if the field is public,
// but not good OO practice
emp.setEmpId(101); // use a method instead
emp.setName("John Smith");
emp.setSsn("011-22-3467");
emp.setSalary(120345.27);
Nesse fragmento de cdigo Java, voc constri uma
instncia da classe Employee e designa a referncia
ao novo objeto a uma varivel denominada emp.
Em seguida, designa valores ao objeto Employee.
Criando uma Instncia da Classe Employee
Para usar a classe Employee para armazenar as informaes de um funcionrio,
necessrio alocar memria para o objeto Employee e chamar um mtodo construtor na
classe. Uma instncia de um objeto criada quando voc usa a palavra-chave new. Todos
os campos declarados na classe recebem espao na memria e so inicializados para seus
valores default. O mtodo construtor , ento, chamado. Se a alocao de memria e o
construtor tiverem sucesso, uma referncia ao objeto ser retornada. No exemplo mostrado
no slide, a referncia designada a uma varivel denominada emp.
Para armazenar valores (dados) na instncia de objeto Employee, bastaria designar valores
a cada campo. No entanto, essa no uma boa prtica e contraria o princpio do
encapsulamento. Em vez disso, necessrio usar mtodos para definir o valor de cada
campo de dados. Posteriormente nesta lio, voc aprender a restringir o acesso aos
campos para promover o encapsulamento.
Quando todos os campos de dados estiverem definidos com valores, voc ter uma instncia
de um funcionrio (Employee) com um empId com valor 101, name com a string John
Smith, string do nmero do seguro social (ssn) definida como 011-22-3467 e salary com o
valor 120.345,27.
Programao Java SE 7 2 - 23
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Construtores
public class Employee {
public Employee() {
}
}
Employee emp = new Employee();
O valor retornado pelo construtor uma referncia a um
objeto Java do tipo criado.
Os construtores podem receber parmetros.
Um construtor simples sem
argumento (no-arg).
Construtor um pseudomtodo que cria um objeto. Na linguagem de programao Java, os
construtores so mtodos que tm o mesmo nome que sua classe usou para criar uma
instncia de um objeto. Os construtores so chamados por meio da palavra-chave new.
Os construtores esto descritos com mais detalhes na lio Encapsulamento e Criao de
Subclasses.
Programao Java SE 7 2 - 24
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Instruo package
A palavra-chave package utilizada em Java para agrupar
classes. Um pacote implementado como uma pasta e, como
tal, fornece um namespace a uma classe.
com.example.domain +com
|_+example
|_+domain
|_+Employee.java
|_+Manager.java
viso de namespace viso de pasta
S
e
m
p
re
d
e
c
la
re
u
m
p
a
c
o
te
!
Employee
Manager
Pacotes
Em Java, um pacote um grupo de tipos (de classe). S pode haver uma package
declarao para uma classe.
Os pacotes so mais do que uma simples convenincia. Os pacotes criam um namespace,
um conjunto lgico de elementos, como uma hierarquia de diretrios.
prtica recomendada sempre usar uma declarao package. A declarao package
sempre est localizada no incio da classe.
Programao Java SE 7 2 - 25
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Instrues import
A palavra-chave import utilizada para identificar classes
s quais voc deseja fazer referncia na sua classe.
A instruo import oferece uma maneira prtica de
identificar as classes s quais voc deseja fazer referncia
na sua classe.
import java.util.Date;
possvel importar uma nica classe ou um pacote completo:
import java.util.*;
possvel incluir vrias instrues import:
import java.util.Date;
import java.util.Calendar;
prtica recomendada usar o pacote completo e nome da
classe, em vez do curinga * para evitar conflitos de nome
de classe.
Importaes
possvel se referir a uma classe usando seu namespace totalmente qualificado nas suas
aplicaes, como no seguinte exemplo:
java.util.Date date = new java.util.Date();
Mas isso logo exigiria muita digitao! Em vez disso, o fornece a instruo import, que
permite declarar que voc deseja fazer referncia a uma classe em outro pacote.
Observao: prtica recomendada usar o nome de classe e de pacote especfico
totalmente qualificado para evitar confuso quando houver duas classes com o mesmo
nome, como no seguinte exemplo: java.sql.Date e java.util.Date. A primeira uma
classe Date utilizada para armazenar um tipo Date em um banco de dados, e
java.util.Date uma classe Date de propsito geral. Na verdade, java.sql.Date
uma subclasse de java.util.Date. Isso ser descrito com mais detalhes posteriormente
no curso.
Observao: Os IDEs modernos, como o NetBeans e o Eclipse, procuram e adicionam
instrues import automaticamente. No NetBeans, por exemplo, use a combinao de teclas
Ctrl + Shift + I para corrigir importaes no seu cdigo.
Programao Java SE 7 2 - 26
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Mais sobre import
As instrues import vm depois da declarao de pacote
e antes da declarao de classe.
A instruo import no obrigatria.
Por default, a sua classe sempre importa java.lang.*
No necessrio importar classes que esto no mesmo
pacote:
package com.example.domain;
import com.example.domain.Manager; // unused import
Mais detalhes sobre esse pacote e suas classes sero fornecidos posteriormente no curso.
Programao Java SE 7 2 - 27
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Java Valor por Passagem
A linguagem Java (ao contrrio de C++) usa valor por
passagem para toda especificao de parmetros.
Para visualizar isso com primitivas, considere o seguinte:
int x = 3;
int y = x;
O valor de x copiado e especificado para y:
Se x for modificado (por exemplo, x = 5;), o valor de y
permanecer inalterado.
3 3
x y
copiar o valor de x
A linguagem Java usa valor por passagem para todas as operaes de designao. Isso
significa que o argumento no lado direito do sinal de igual avaliado, e o valor do argumento
designado ao lado esquerdo do sinal de igual.
Para primitivas Java, isso direto. O Java no especifica uma referncia para uma primitiva
(como um inteiro), mas uma cpia do valor.
Programao Java SE 7 2 - 28
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Valor por Passagem para Referncias de Objeto
Para objetos Java, o valor do lado direito de uma designao
uma referncia memria que armazena um objeto Java.
Employee x = new Employee();
Employee y = x;
A referncia um endereo na memria.
Aps a designao, o valor de y igual ao de x: uma
referncia ao mesmo objeto Employee.
42
42
x
y
Objeto
Employee
endereo de memria = 42
y = x;
Para objetos Java, o valor de uma referncia de objeto o ponteiro de memria para a
instncia do objeto Employee criado.
Quando voc designa o valor de x a y, no est criando um novo objeto Employee, mas
uma cpia do valor da referncia.
Observao: Objeto uma instncia de classe ou um array. Os valores de referncia
(referncias) so ponteiros para esses objetos, e uma referncia null especial, que no se
refere a nenhum objeto.
Programao Java SE 7 2 - 29
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Objetos Especificados como Parmetros
Sempre que um novo objeto criado, tambm criada uma
nova referncia. Considere os seguintes fragmentos de cdigo:
Employee x = new Employee();
foo(x);
public void foo(Employee e) {
e = new Employee();
e.setSalary (1_000_000_00); // What happens to x here?
}
O valor de x permanece inalterado como consequncia
da chamada de mtodo foo:
42
Objeto
Employee
99
Objeto
Employee
x
e
Sempre que criado um novo valor, como a instruo e = new Employee(); no mtodo
foo, um novo objeto criado e o valor do parmetro alterado para o novo valor.
O valor de x simplesmente copiado para o parmetro do mtodo. Por isso, x permanece
inalterado durante e aps a execuo do mtodo foo.
Qual o valor retornado por x.getSalary(); aps a chamada foo(x);?
Conforme ilustrado, o valor da referncia x permanece inalterado, e o valor retornado seria o
mesmo que antes da chamada. Isso porque voc usou a palavra-chave new para construir
um novo objeto e designou essa instncia de objeto a e. O valor que e tinha anteriormente (a
referncia a x) agora sobregravado.
O mtodo setSalary est operando na referncia e, e no na referncia de objeto
especificada para o mtodo.
Se voc removesse a instruo, e = new Employee();, o mtodo e.setSalary estaria
operando na referncia x, e o funcionrio representado pela varivel x estaria ganhando
muito dinheiro!
Observao: Os locais de memria 42 e 99 tm apenas finalidade de exemplificao!
Programao Java SE 7 2 - 30
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Como Compilar e Executar
necessrio compilar os arquivos de classe Java antes de
execut-los.
Para compilar um arquivo-fonte Java, use o compilador Java
(javac).
javac classpath <path to other classes> -d <complier
output path> <path to source>.java
possvel usar a varivel de ambiente CLASSPATH para
o diretrio acima do local da hierarquia de pacotes.
Aps a compilao do arquivo-fonte .java, gerado um
arquivo .class.
Para executar a aplicao Java, use o interpretador Java
(java):
java classpath <path to other classes> <package
name>.<classname>
CLASSPATH
A varivel CLASSPATH utilizada pelo compilador Java e pelo interpretador Java (runtime).
A varivel classpath pode conter:
Uma lista de nomes de diretrio (separados por ponto e vrgula no Windows e dois
pontos no UNIX)
- As classes esto em uma rvore de pacotes relacionada a um dos diretrios na
lista.
- Por default, a varivel classpath contm o diretrio de trabalho atual (.).
Um nome de arquivo .zip ou .jar totalmente qualificado com seu nome de caminho
- As classes nesses arquivos devem ser compactadas com os nomes de caminho
derivados dos diretrios formados por seus nomes de pacote.
Observao: O diretrio que contm o nome de raiz da rvore de pacotes deve ser
adicionado a classpath. Considere a incluso das informaes de classpath na janela
de comando ou mesmo no comando Java, em vez de defini-las por hard-code no ambiente.
Programao Java SE 7 2 - 31
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Compilando e Executando: Exemplo
Suponha que a classe indicada nas observaes esteja
no diretrio D:\test\com\example:
javac d D:\test D:\test\com\example\HelloWorld.java
Para executar a aplicao, voc usa o interpretador
e o nome de classe totalmente qualificado:
java classpath D:\test com.example.HelloWorld
Hello World!
java classpath D:\test com.example.HelloWorld Tom
Hello Tom!
A vantagem de um IDE, como o NetBeans, que o
gerenciamento do caminho da classe, a compilao e a
execuo da aplicao Java so tratados por meio da
ferramenta.
Exemplo
Considere a seguinte classe simples em um arquivo denominado HelloWorld.java no
diretrio D:\test\com\example:
package com.example;
public class HelloWorld {
public static void main (String [] args) {
if (args.length < 1) {
System.out.println("Hello World!");
} else {
System.out.println("Hello " + args[0] + "!");
}
}
}
Programao Java SE 7 2 - 32
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Carregador de Classe Java
Durante a execuo de um programa Java, a JVM (Java
Virtual Machine) carrega os arquivos de classe Java
compilados usando uma classe Java prpria denominada
carregador de classe (java.lang.ClassLoader).
Quando um objeto instanciado, o carregador de classe
chamado:
public class Test {
public void someOperation() {
Employee e = new Employee();
//...
}
}
Test.class.getClassLoader().loadClass("Employee");
O carregador de classe
chamado para "carregar" essa
classe para a memria.
Em geral, o uso do carregador de classe totalmente transparente. possvel ver os
resultados do carregador de classe usando o flag -verbose ao executar a aplicao. Por
exemplo:
java verbose classpath D:\test com.example.HelloWorld
[Loaded java.lang.Object from shared objects file]
[Loaded java.io.Serializable from shared objects file]
[Loaded java.lang.Comparable from shared objects file]
[Loaded java.lang.CharSequence from shared objects file]
[Loaded java.lang.String from shared objects file]
[Loaded java.lang.reflect.GenericDeclaration from shared objects
file]
[Loaded java.lang.reflect.Type from shared objects file]
[Loaded java.lang.reflect.AnnotatedElement from shared objects file]
[Loaded java.lang.Class from shared objects file]
[Loaded java.lang.Cloneable from shared objects file]
[Loaded java.lang.ClassLoader from shared objects file]
... e muitos outros
Programao Java SE 7 2 - 33
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Coleta de Lixo
Quando um objeto instanciado por meio da palavra-chave new,
a alocado espao de memria para o objeto. O escopo de uma
referncia de objeto depende de onde ele seja instanciado:
public void someMethod() {
Employee e = new Employee();
// operations on e
}
Quando someMethod concludo, o espao de memria a
que e faz referncia deixa de estar acessvel.
O coletor de lixo do Java reconhece quando uma instncia
no est mais acessvel e libera memria automaticamente.
O escopo do objeto e
termina aqui.
possvel ajustar o esquema de coleta de lixo do Java de acordo com o tipo de aplicao
que est sendo criado. Para obter mais informaes, considere a possibilidade de fazer o
curso da Java Performance Tuning and Optimization (D69518GC10) oferecido pela Oracle
University.
Programao Java SE 7 2 - 34
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Resumo
Nesta lio, voc aprendeu a:
Criar classes Java simples
Criar variveis primitivas
Manipular Strings
Usar as instrues de ramificao if-else e switch
Fazer iterao com loops
Criar arrays
Usar campos, construtores e mtodos Java
Usar as instrues package e import
Programao Java SE 7 2 - 35
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Quiz
No seguinte fragmento, quais os trs problemas que voc capaz
de identificar?
package com.oracle.test;
public class BrokenClass {
public boolean valid = "false";
public String s = new String ("A new string");
public int i = 40_000.00;
public BrokenClass() { }
}
a. Uma instruo import est ausente.
b. Uma string designada a boolean valid.
c. String s criada por meio de new.
d. Uma instruo return est ausente no mtodo BrokenClass.
e. Um mtodo necessrio para a criao de um novo objeto
BrokenClass.
f. Um tipo double designado ao valor inteiro i.
Programao Java SE 7 2 - 36
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Quiz
Usando a classe Employee definida nesta lio, determine
o valor de e.name no seguinte fragmento:
public Employee changeName (Employee e, String name) {
e.name = name;
return (e);
}
//... in another class
Employee e = new Employee();
e.name = "Fred";
e = changeName("Bob", e);
System.out.println (e.getName());
a. Fred
b. Bob
c. null
d. String vazia
Programao Java SE 7 2 - 37
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Quiz
No seguinte fragmento, qual o resultado?
public float average (int[] values) {
float result = 0;
for (int i = 1; i < values.length; i++)
result += values;
return (result/values.length);
}
int[] nums = {100, 200, 300};
System.out.prinln (average(avg));
a. 100
b. 150.33
c. 166.67
d. 200
Programao Java SE 7 2 - 38
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Exerccio 2-1 Viso Geral:
Criando Classes Java
Este exerccio abrange os seguintes tpicos:
Criando uma classe Java por meio do NetBeans IDE
Criando uma classe Java com um mtodo main
Escrevendo cdigo no corpo do mtodo main para criar
uma instncia do objeto Employee e exibir valores da
classe na console
Compilando e testando a aplicao por meio do NetBeans
IDE
Programao Java SE 7 2 - 39
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Encapsulamento e Criao de Subclasses
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Objetivos
Aps concluir esta lio, voc ser capaz de:
Usar encapsulamento no design de classe Java
Modelar problemas de negcios usando classes Java
Tornar classes imutveis
Criar e usar subclasses Java
Sobrecarregar mtodos
Usar mtodos de argumento varivel
Programao Java SE 7 3 - 2
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Encapsulamento
O termo encapsulamento significa envolver em uma cpsula,
ou cobrir o objeto com algo. Na programao orientada a
objetos, o encapsulamento cobre, ou envolve, o funcionamento
interno de um objeto Java.
Variveis de dados, ou campos, so ocultados do usurio
do objeto.
Os mtodos, que so as funes em Java, fornecem um
servio explcito ao usurio do objeto, mas ocultam a
implementao.
Desde que os servios no mudem, possvel modificar
a implementao sem afetar o usurio.
O termo encapsulamento est definido no Java Technology Reference Glossary da seguinte
forma:
A localizao do conhecimento em um mdulo. Como os objetos encapsulam dados e
implementao, o usurio de um objeto pode visualizar o objeto como uma caixa preta que
fornece servios. possvel adicionar, excluir ou alterar mtodos e variveis de instncia. No
entanto, se os servios fornecidos pelo objeto permanecerem os mesmos, o cdigo que usa
o objeto poder continuar a us-lo sem ser reescrito.
Uma analogia do encapsulamento o volante do carro. Quando voc dirige, seja o carro seu,
de um amigo ou alugado, provvel que nunca se preocupe em saber como o volante
implementa uma funo de virar para a direita ou para a esquerda. O volante pode estar
conectado s rodas dianteiras de diversas formas: junta articulada, cremalheira ou algum
conjunto extico de servomecanismos.
Contanto que o carro vire corretamente quando voc gira o volante, este encapsula as
funes necessrias voc no precisa pensar na implementao.
Programao Java SE 7 3 - 3
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Encapsulamento: Exemplo
Que dados e operaes voc encapsularia em um objeto que
representa um funcionrio?
ID do funcionrio
Nome
Nmero do seguro social
Salrio
Definir Nome
Aumentar Salrio
Um Modelo Simples
Suponha que voc seja solicitado a criar um modelo de um funcionrio tpico. Que dados
voc desejaria representar em um objeto que descreve um funcionrio?
ID do funcionrio: possvel usar essa informao como um identificador do
funcionrio.
Nome: Atribuir nome ao funcionrio sempre uma boa ideia!
Nmero do seguro social: Somente para funcionrios dos Estados Unidos. Talvez
voc deseje definir outra identificao para funcionrio de outros pases.
Salrio: sempre bom registrar a remunerao do funcionrio.
Que operaes voc permitiria no objeto do funcionrio?
Alterar Nome: Se a funcionria se casar ou divorciar, poder ocorrer uma alterao de
nome.
Aumentar salrio: Aumentos por mrito.
Depois que um objeto de funcionrio criado, provvel que voc no queira permitir
alteraes dos campos de ID do funcionrio e de nmero do seguro social. Por isso, voc
precisa de uma maneira de criar um funcionrio sem alteraes, exceto por meio dos
mtodos permitidos.
Programao Java SE 7 3 - 4
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Encapsulamento: Dados Privados, Mtodos Pblicos
Uma maneira de ocultar detalhes de implementao declarar
todos os campos como private.
1 public class CheckingAccount {
2 private int custID;
3 private String name;
4 private double amount;
5 public CheckingAccount {
6 }
7 public void setAmount (double amount) {
8 this.amount = amount;
9 }
10 public double getAmount () {
11 return amount;
12 }
13 //... other public accessor and mutator methods
14 }
Declarar campos como private
impede o acesso direto a esses dados
em uma instncia de classe.
// illegal!
ca.amount = 1_000_000_000.00;
Nesse exemple, os campos custID, name e amount esto marcados agora como private,
o que os torna invisveis fora dos mtodos da prpria classe.
Programao Java SE 7 3 - 5
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Modificadores de Acesso Pblicos e Privados
A palavra-chave public, aplicada a campos e mtodos,
permite que qualquer classe em qualquer pacote acesse o
campo ou mtodo.
A palavra-chave private, aplicada a campos e mtodos,
permite o acesso apenas a outros mtodo da mesma
classe.
CheckingAccount chk = new CheckingAccount ();
chk.amount = 200; // Compiler error amount is a private field
chk.setAmount (200); // OK
Tambm possvel aplicar a palavra-chave private a
um mtodo para ocultar um detalhe de implementao.
// Called when a withdrawal exceeds the available funds
private void applyOverdraftFee () {
amount += fee;
}
Programao Java SE 7 3 - 6
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Revisitando "Employee"
No momento, a classe Employee est usando acesso public
para todos os campos. Para encapsular os dados, torne os
campos private.
package come.example.model;
public class Employee {
private int empId;
private String name;
private String ssn;
private double salary;
//... constructor and methods
}
Etapa 1 do
encapsulamento:
Ocultar os dados
(campos).
Programao Java SE 7 3 - 7
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Nomeao de Mtodos: Melhores Prticas
Embora os campos estejam ocultos agora com o uso do
acesso private, h alguns problemas relacionados classe
Employee atual.
Os mtodos setter (no momento, acesso public)
permitem que qualquer outra classe altere o ID, SSN e
salrio (para cima ou para baixo).
Na verdade, a classe atual no representa as operaes
definidas no design de classe Employee original.
Duas das melhores prticas para mtodos:
Oculte o mximo de detalhes de implementao possvel.
Nomeie o mtodo de modo a identificar claramente seu uso
ou funcionalidade.
O modelo original da classe Employee tinha uma
operao para alterar nome e aumentar salrio.
Escolhendo Mtodos Bem-Intencionados
Assim como os campos devem definir claramente o tipo de dados que armazenam, os
mtodos devem identificar claramente as operaes que executam. Uma das maneiras mais
fceis de facilitar a leitura do seu cdigo (Java ou de outra linguagem) criar nomes de
mtodo que identifiquem claramente o que eles realizam.
Programao Java SE 7 3 - 8
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Refinamento da Classe Employee
1 package com.example.domain;
2 public class Employee {
3 // private fields ...
4 public Employee () {
5 }
6 // Remove all of the other setters
7 public void setName(String newName) {
8 if (newName != null) {
9 this.name = newName;
10 }
11 }
12
13 public void raiseSalary(double increase) {
14 this.salary += increase;
15 }
16 }
Etapa 2 do
encapsulamento:
Esses nomes de
mtodo tm sentido no
contexto de um
funcionrio.
Os mtodos setter atuais na classe permitem que qualquer classe que use uma instncia de
Employee altere os campos de ID, de salrio e de SSN do objeto. Do ponto de vista
empresarial, no h operaes a serem realizadas em um funcionrio. Uma vez criado o
funcionrio, esses campos devem permanecer imutveis (sem permitir alteraes).
O modelo Employee definido no slide Encapsulamento: Exemplo tinha apenas duas
operaes: uma para alterar o nome de um funcionrio (como consequncia de um
casamento ou divrcio) e outra para aumentar o salrio de um funcionrio.
Para refinar a classe Employee, a primeira etapa remover os mtodos setter e criar
mtodos que identifiquem claramente suas finalidades. Aqui h dois mtodos: um para
alterar um nome de funcionrio (setName) e o outro para aumentar o salrio de um
funcionrio (raiseSalary).
Observe que a implementao do mtodo setName testa o parmetro de string especificado
para verificar se a string no nula. O mtodo pode fazer mais verificaes conforme a
necessidade.
Programao Java SE 7 3 - 9
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Tornar Classes o Mais Imutveis Possvel
1 package com.example.domain;
2 public class Employee {
3 // private fields ...
4 // Create an employee object
5 public Employee (int empId, String name,
6 String ssn, double salary) {
7 this.empId = empId;
8 this.name = name;
9 this.ssn = ssn;
10 this.salary = salary;
11 }
12
13 public void setName(String newName) { ... }
14
15 public void raiseSalary(double increase) { ... }
16 }
Etapa 3 do
encapsulamento: Remover
o construtor default e
implementar um construtor
para definir o valor de
todos os campos.
Prtica Recomendada: Imutabilidade
Por fim, como a classe no tem mais mtodos setter, voc precisa de uma maneira de definir
o valor inicial dos campos. A resposta especificar cada valor de campo na estrutura do
objeto. Ao criar um construtor que use todos os campos como argumentos, possvel
garantir que uma instncia de Employee seja totalmente preenchida com dados antes que
se torne um objeto vlido de funcionrio. Esse construtor substitui o construtor sem
argumento (no-arg).
Naturalmente, o usurio da sua classe poderia especificar valores nulos, e voc precisa
determinar se deseja procur-los no seu construtor. As estratgias para tratar essas
situaes esto descritas em sees posteriores.
O processo de remover os mtodos setter e substituir o construtor sem argumento (no-arg )
tambm garante que uma instncia de Employee tenha campos Employee ID e Social
Security Number (SSN) imutveis.
Programao Java SE 7 3 - 10
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Criando Subclasses
Voc criou uma classe Java para modelar os dados e
operaes de um objeto Employee. Agora, suponha que
queria especializar os dados e operaes para descrever um
objeto Manager.
1 package com.example.domain;
2 public class Manager {
3 private int empId;
4 private String name;
5 private String ssn;
6 private double salary;
7 private String deptName;
8 public Manager () { }
9 // access and mutator methods...
10 }
espere um
instante...
esse cdigo parece fam
iliar....
Especializao Usando Criao de Subclasses Java
A classe Manager mostrada aqui se parece bastante com a classe Employee, mas com
alguma especializao. Um gerente (Manager) tambm tem um departamento, que, por sua
vez, tem um nome. Como consequncia, provvel que tambm existam operaes
adicionais.
O que isso demonstra que um objeto Manager um objeto Employeemas um objeto
Employee com recursos adicionais.
No entanto, se definssemos classes Java dessa maneira, haveria muita codificao
redundante!
Programao Java SE 7 3 - 11
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Criao de Subclasses
Em uma linguagem orientada a objetos como o Java, a criao
de subclasses utilizada para definir uma nova classe com
base em uma classe j existente.
superclasse: Employee
(classe "me")
subclasse: Manager,
um Employee
(classe "filha")
isso significa "herdar"
Um Programa Java Simples
Quando uma classe existente subclassificada, a nova classe herda as caractersticas da
outra classe. Essa nova classe chamada de subclasse e uma especializao da
superclasse. Todos os mtodos e campos da superclasse que no so privados fazem parte
da subclasse.
Por isso, nesse diagrama, uma classe Manager obtm empId, name, SSN, salary e todos
os mtodos pblicos de Employee.
importante lembrar que, embora Manager especialize Employee, um objeto Manager
ainda um objeto Employee.
Observao: O termo subclasse um tanto inadequado. A maioria das pessoas pensa no
prefixo sub como significando menos. No entanto, uma subclasse Java a soma dela
prpria e de sua classe me. Quando voc cria uma instncia de uma subclasse, a estrutura
resultante armazenada na memria contm todos os cdigos da classe me, da classe av e
assim por diante, subindo todos os nveis da hierarquia at chegar classe Object.
Programao Java SE 7 3 - 12
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Subclasse Manager
1 package com.example.domain;
2 public class Manager extends Employee {
3 private String deptName;
4 public Manager (int empId, String name,
5 String ssn, double salary, String dept) {
6 super (empId, name, ssn, salary);
7 this.deptName = dept;
8 }
9
10 public String getDeptName () {
11 return deptName;
12 }
13 // Manager also gets all of Employee's public methods!
14 }
A palavra-chave super
utilizada para chamar o
construtor da classe me. Ela
precisa ser a primeira instruo
no construtor.
Sintaxe Java para Criao de Subclasses
A palavra -chave extends utilizada para criar uma subclasse.
A classe Manager, ao estender a classe Employee, herda todos os mtodos e campos de
dados no privados de Employee. Afinal, se um gerente tambm um funcionrio, Manager
tem todos os atributos e operaes de Employee.
Observe que a classe Manager declara seu prprio construtor. Os construtores no so
herdados da classe me. O prximo slide mostra detalhes adicionais sobre isso.
O construtor que Manager declara na linha 4 chama o construtor de sua classe me,
Employee, usando a palavra-chave super. Isso define o valor de todos os campos
Employee: id, name, ssn e salary. Manager uma especializao de Employee. Por
isso, construir um objeto Manager exige um nome de departamento, que designado ao
campo deptName na linha 7.
Que outros mtodos voc poder querer em um modelo de objeto Manager? Talvez voc
deseje um mtodo que adicione um objeto Employee a este objeto Manager. possvel
usar um array ou uma classe especial denominada conjunto para manter o controle dos
funcionrios pelos quais esse gerente responsvel. Para obter detalhes sobre conjuntos,
consulte a lio Genricos e Conjuntos.
Programao Java SE 7 3 - 13
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Construtores No So Herdados
Apesar de uma subclasse herdar todos os mtodos e campos
de uma classe me, ela no herda construtores. H duas
maneiras de obter um construtor:
Criar o seu prprio construtor.
Usar o construtor default.
Se voc no declarar um construtor, um construtor sem
argumento (no-arg) default ser fornecido.
Se voc declarar o seu prprio construtor, o construtor
default no ser mais fornecido.
Construtores em Subclasses
Toda subclasse herda os mtodos e campos no privados de sua classe me (superclasse).
No entanto, a subclasse no herda o construtor da classe me. Ela precisa fornecer um
construtor.
A Especificao da Linguagem Java inclui a seguinte descrio:
Declaraes de construtor no so membros. Nunca so herdadas e, portanto, no esto
sujeitas a serem ocultadas ou substitudas.
Programao Java SE 7 3 - 14
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Usando super
Para construir uma instncia de uma subclasse, normalmente
mais fcil chamar o construtor da classe me.
Em seu construtor, Manager chama o construtor de
Employee.
super (empId, name, ssn, salary);
A palavra-chave super utilizada para chamar
o construtor de uma classe me.
Ela precisa ser a primeira instruo do construtor.
Se ela no for fornecida, uma chamada default a super()
ser inserida.
A palavra-chave super tambm pode ser utilizada para
chamar o mtodo de uma classe me ou para acessar o
campo (no privado) de uma classe me.
A classe Manager declara seu prprio construtor e chama o construtor da classe me
usando a palavra-chave super.
Observao: A chamada super do construtor da classe me deve ser a primeira instruo
do construtor.
A palavra-chave super tambm pode ser utilizada para chamar explicitamente os mtodos
da classe me ou para acessar campos.
Programao Java SE 7 3 - 15
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Construindo um Objeto Manager
Criar um objeto Manager o mesmo que criar um objeto
Employee:
Manager mgr = new Manager (102, "Barbara Jones",
"107-99-9078", 109345.67, "Marketing");
Todos os mtodos de Employee esto disponveis para
Manager:
mgr.raiseSalary (10000.00);
A classeManager define um novo mtodo para obter o
nome do departamento:
String dept = mgr.getDeptName();
Embora o arquivo Manager.java no contenha todos os mtodos da classe
Employee.java (explicitamente), eles esto includos na definio do objeto. Por isso, aps
a criao de uma instncia de um objeto Manager, possvel usar os mtodos declarados
em Employee.
Tambm possvel chamar mtodos que so especficos da classe Manager.
Programao Java SE 7 3 - 16
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
O Que Polimorfismo?
A definio da palavra polimorfismo muitas formas.
Employee emp = new Manager();
Essa designao perfeitamente vlida. Um funcionrio
pode ser um gerente.
No entanto, o seguinte cdigo no pode ser compilado:
emp.setDeptName ("Marketing"); // compiler error!
O compilador Java reconhece a varivel emp apenas
como um objeto Employee. Como a classe Employee
no tem um mtodo setDeptName, exibida uma
mensagem de erro.
Em linguagens de programao orientada a objetos, como o Java, polimorfismo a
capacidade de fazer referncia a um objeto usando sua forma real ou uma forma me.
Isso especialmente til na criao de um mtodo de negcios de propsito geral. Por
exemplo, possvel aumentar o salrio de qualquer objeto Employee (pai ou filho)
simplesmente especificando a referncia de objeto para um mtodo de negcios de propsito
geral que aceita um objeto Employee como argumento.
Programao Java SE 7 3 - 17
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Sobrecarga de Mtodos
O seu design pode chamar vrios mtodos na mesma classe
com o mesmo nome, mas com diferentes argumentos.
public void print (int i)
public void print (float f)
public void print (String s)
O Java permite reutilizar um nome de mtodo para mais
de um mtodo.
Duas regras se aplicam a mtodos sobrecarregados:
As listas de argumentos precisam se diferentes.
Os tipos de retorno podem ser diferentes.
Por isso, o seguinte cdigo no vlido:
public void print (int i)
public String print (int i)
possvel criar mtodos com a mesma inteno (nome de mtodo), como print, para
imprimir diversos tipos. possvel criar um mtodo para cada tipo:
printInt(int i)
printFloat(float f)
printString(String s)
Mas isso seria entediante e no muito orientado a objetos. Em vez disso, possvel criar um
nome de mtodo reutilizvel e apenas alterar a lista de argumentos. Esse processo
denominado sobrecarga.
Com a sobrecarga de mtodos, as listas de argumentos precisam ser diferentes em
ordem, nmero ou tipo. E os tipos de retorno podem ser diferentes. No entanto, no so
permitidos dois mtodos com a mesma lista de argumentos que difiram apenas quanto ao
tipo de retorno.
Programao Java SE 7 3 - 18
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Mtodos Que Usam Argumentos Variveis
Uma variao da sobrecarga de mtodos ocorre quando voc
precisa de um mtodo que recebe qualquer nmero de
argumentos do mesmo tipo:
public class Statistics {
public float average (int x1, int x2) {}
public float average (int x1, int x2, int x3) {}
public float average (int x1, int x2, int x3, int x4) {}
}
Esses trs mtodos sobrecarregados compartilham a
mesma funcionalidade. Seria bom contrair esses mtodos
em um nico mtodo.
Statistics stats = new Statistics ();
float avg1 = stats.average(100, 200);
float avg2 = stats.average(100, 200, 300);
float avg3 = stats.average(100, 200, 300, 400);
Mtodos com um Nmero Varivel do Mesmo Tipo
Um caso de sobrecarga ocorre quando voc precisa fornecer um conjunto de mtodos
sobrecarregados que diferem em nmero do mesmo tipo de argumentos. Por exemplo,
suponha que voc deseje ter mtodos para calcular uma mdia. possvel calcular mdias
para 2, 3 ou 4 (ou mais) inteiros.
Cada um desses mtodos executa um tipo semelhante de clculo a mdia dos
argumentos especificados, como neste exemplo:
public class Statistics {
public float average(int x1, int x2) { return (x1 + x2) / 2; }
public float average(int x1, int x2, int x3) {
return (x1 + x2 + x3) / 3;
}
public float average(int x1, int x2, int x3, int x4) {
return (x1 + x2 + x3 + x4) / 4;
}
}
O Java oferece uma sintaxe conveniente para contrair esses trs mtodos em apenas um e
fornecer qualquer nmero de argumentos.
Programao Java SE 7 3 - 19
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Mtodos Que Usam Argumentos Variveis
O Java fornece um recurso denominado varargs ou
argumentos variveis.
1 public class Statistics {
2 public float average(int... nums) {
3 int sum = 0;
4 for (int x : nums) { // iterate int array nums
5 sum += x;
6 }
7 return ((float) sum / nums.length);
8 }
9 }
Observe que o argumento nums , na verdade, um objeto
array do tipo int[]. Isso permite ao mtodo permitir e
iterar em qualquer nmero de elementos.
A notao varargs trata
o parmetro nums
como um array.
Usando Argumentos Variveis
O mtodo average mostrado no slide recebe qualquer nmero de argumentos inteiros. A
notao (int... nums) converte a lista de argumentos especificados para o mtodo
average em um objeto array do tipo int.
Observao: Mtodos que usam varargs tambm podem no receber nenhum parmetro
uma chamada average() vlida. Voc ver varargs como parmetros opcionais em uso
na API NIO.2 na lio E/S de Arquivo Java. Para explicar isso, voc poderia reescrever o
mtodo average no slide da seguinte forma:
public float average(int... nums) {
int sum = 0; float result = 0;
if (nums.length > 0) {
for (int x : nums) // iterate int array nums
sum += x;
result = (float) sum / nums.length;
}
return (result);
}
}
Programao Java SE 7 3 - 20
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Herana nica
A linguagem de programao Java permite que uma classe
estenda apenas uma outra classe. Isso se chama herana
nica.
Embora o Java no permita mais de uma classe para uma subclasse, a linguagem fornece
recursos que permitem a vrias classes implementar os recursos de outras. Voc ver isso
na lio sobre herana.
A herana nica no impede o contnuo refinamento e especializao de classes, conforme
mostrado anteriormente.
No diagrama mostrado no slide, um gerente pode ter funcionrios, e um diretor tem um
oramento e pode aprovar despesas.
Programao Java SE 7 3 - 21
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Resumo
Nesta lio, voc aprendeu a:
Criar classes Java simples
Usar encapsulamento no design de classe Java
Modelar problemas de negcios usando classes Java
Tornar classes imutveis
Criar e usar subclasses Java
Sobrecarregar mtodos
Usar mtodos de argumento varivel
Programao Java SE 7 3 - 22
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Quiz
Considerando o diagrama mostrado no slide Herana nica
e as instrues Java a seguir, que instruo no compilada?
Employee e = new Director();
Manager m = new Director();
Admin a = new Admin();
a. e.addEmployee (a);
b. m.addEmployee(a);
c. m.approveExpense(100000.00);
d. Nenhuma compilada.
Programao Java SE 7 3 - 23
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Quiz
Considere as seguintes classes que no so compiladas:
public class Account {
private double balance;
public Account(double balance) { this.balance = balance; }
//... getter and setter for balance
}
public class Savings extends Account {
private double interestRate;
public Savings(double rate) { interestRate = rate; }
}
Que correo permite que essas classes sejam compiladas?
a. Adicionar um construtor sem argumento (no-arg) a
Savings.
b. Chamar o mtodo setBalance de Account em
Savings.
c. Alterar o acesso de interestRate para public.
d. Adicionar um constructor a Savings que chame o
construtor de Account usando super.
Programao Java SE 7 3 - 24
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Quiz
Qual das declaraes a seguir demonstra a aplicao de
convenes de nomeao Java adequadas?
a. public class repeat { }
b. public void Screencoord (int x, int y){}
c. private int XCOORD;
d. public int calcOffset (int xCoord, int
yCoord) { }
Programao Java SE 7 3 - 25
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Quiz
Que alteraes voc faria para tornar essa classe imutvel?
(Marque todas as opes aplicveis.)
public class Stock {
public String symbol;
public double price;
public int shares;
public double getStockValue() { }
public void setSymbol(String symbol) { }
public void setPrice(double price) { }
public void setShares(int number) { }
}
a. Tornar os campos symbol, shares e price private.
b. Remover setSymbol, setPrice e setShares.
c. Tornar o mtodo getStockValue private.
d. Adicionar um construtor que receba symbol, shares e
price como argumentos.
Programao Java SE 7 3 - 26
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Exerccio 3-1 Viso Geral:
Criando Subclasses
Este exerccio abrange os seguintes tpicos:
Aplicao de princpios de encapsulamento classe
Employee que voc criou no exerccio anterior
Criao de subclasses de Employee, incluindo Manager,
Engineer e Assistente Administrativo (Admin)
Criao de uma subclasse de Manager denominada
Director
Criao de uma classe de teste com um mtodo
main para testar as suas novas classes
Programao Java SE 7 3 - 27
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Exerccio 3-2 (Opcional) Viso Geral:
Adicionando um Funcionrio a um Gerente
Este exerccio abrange os seguintes tpicos:
Criando um array de Employees denominado staff
Criando um mtodo para adicionar um funcionrio
equipe (staff) do gerente
Criando um mtodo para remover um funcionrio da
equipe (staff) do gerente
Programao Java SE 7 3 - 28
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Design de Classe Java
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Objetivos
Aps concluir esta lio, voc ser capaz de:
Usar nveis de acesso: private, protected, default
e public.
Substituir mtodos
Sobrecarregar construtores e outros mtodos
adequadamente
Usar o operador instanceof para comparar tipos
de objeto
Usar chamada de mtodo virtual
Usar converses ascendentes e descendentes
Substituir mtodos da classe
Object para melhorar a
funcionalidade da sua classe
Programao Java SE 7 4 - 2
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Usando Controle de Acesso
Vimos as palavras-chave public e private. H quatro
nveis de acesso que podem ser aplicados a mtodos e
campos de dados. A tabela a seguir mostra o acesso a um
campo ou mtodo marcado com o modificador de acesso na
coluna da esquerda.
As classes podem ser default (sem modificador) ou public.
Modificador
(palavra-
chave)
Mesma
Classe
Mesmo
Pacote
Subclasse
em Outro
Pacote
Universo
private
Sim
default
Sim Sim
protected
Sim Sim
Sim *
public
Sim Sim Sim Sim
As palavras-chave modificadoras de acesso mostrada nessa tabela so private,
protected e public. Quando uma palavra-chave est ausente, o modificador de acesso
default aplicado.
A palavra-chave private fornece o maior controle sobre o acesso a campos e mtodos.
Com private, s possvel acessar um mtodo ou campo de dados na mesma classe
Java.
A palavra-chave public fornece o melhor acesso a campos e mtodos, tornando-os
acessveis em qualquer lugar: na classe, no pacote, em subclasses e em qualquer outra
classe.
A palavra-chave protected aplicada para manter o acesso no pacote e na subclasse.
Campos e mtodos que usam protected so considerados habilitados para subclasse.
*Observao: O acesso protected estendido s subclasses que residem em um pacote
diferente da classe que tem o recurso protegido. Por isso, os campos e mtodos protegidos
so, na verdade, mais acessveis que os marcados com controle de acesso default.
necessrio usar o acesso protected quando ele apropriado para a subclasse de uma
classe, mas no a classes no relacionadas.
Programao Java SE 7 4 - 3
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Controle de Acesso Protegido: Exemplo
1 package demo;
2 public class Foo {
3 protected int result = 20;
4 int other = 25;
5 }
1 package test;
2 import demo.Foo;
3 public class Bar extends Foo {
4 private int sum = 10;
5 public void reportSum () {
6 sum += result;
7 sum += other;
8 }
9 }
declarao habilitada para
subclasse
erro de compilador
Neste exemplo, h duas classes em dois pacotes. A classe Foo est no pacote demo e
declara um campo de dados denominado result com um modificador de acesso
protected.
Na classe Bar, que estende Foo, h um mtodo, reportSum, que soma o valor de result
a sum. Em seguida, o mtodo tenta adicionar o valor de other a sum. O campo other
declarado usando o modificador default, e isso gera um erro de compilador. Por qu?
Resposta: O campo result, declarado como um campo protected, est disponvel a
todas as subclasses at mesmo de outro pacote. O campo other declarado como
usando acesso default e est disponvel apenas a classes e subclasses declaradas no
mesmo pacote.
Esse exemplo do projeto JavaAccessExample.
Programao Java SE 7 4 - 4
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Cpia de Sombra de Campo: Exemplo
1 package demo;
2 public class Foo2 {
3 protected int result = 20;
4 }
1 package test;
2 import demo.Foo2;
3 public class Bar2 extends Foo2 {
4 private int sum = 10;
5 private int result = 30;
6 public void reportSum() {
7 sum += result;
8 }
9 }
O campo result a
cpia de sombra do
mesmo campo da
classe me.
Nesse exemplo, a classe Foo2 declara o campo result. No entanto, a classe Bar2 declara
seu prprio campo result. A consequncia que o campo result da classe Foo2 tem
como sombra o campo result na classe Bar2. O que sum nesse exemplo? sum agora
40 (10 + 30). Os IDEs modernos (como o NetBeans) detectam cpia de sombra e geram um
aviso.
Os mtodos que tm o mesmo nome no recebem cpia de sombra. Eles so substitudos.
Voc aprender sobre substituio posteriormente nesta lio.
Programao Java SE 7 4 - 5
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Controle de Acesso: Prtica Recomendada
Uma prtica recomendada ao trabalhar com campos torn-los
o mais inacessveis possvel e especificar claramente a
inteno do uso de campos por meio de mtodos.
1 package demo;
2 public class Foo3 {
3 private int result = 20;
4 protected int getResult() { result = value; }
5 }
1 package test;
2 import demo.Foo3;
3 public class Bar3 extends Foo3 {
4 private int sum = 10;
5 public void reportSum() {
6 sum += getResult();
7 }
8 }
O slide mostra uma verso ligeiramente modificada do exemplo usando a palavra-chave
protected. Se a ideia limitar o acesso do resultado do campo a classes do pacote e a
subclasses (protegidas por pacote), necessrio tornar explcito o acesso definindo um
mtodo criado especificamente para acesso no nvel do pacote e da subclasse.
Programao Java SE 7 4 - 6
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Substituindo Mtodos
Considere um requisito fornecer uma String que represente
alguns detalhes sobre os campos da classe Employee.
1 public class Employee {
2 private int empId;
3 private String name;
4 // ... other fields and methods
5 public String getDetails () {
6 return "Employee id: " + empId +
7 " Employee name:" + name;
8 }
9 }
Embora a classe Employee tenha getters para retornar valores para uma instruo print,
talvez seja conveniente ter um mtodo utilitrio para obter detalhes especficos sobre o
funcionrio. Considere um mtodo adicionado classe Employee para imprimir detalhes
sobre o objeto Employee.
Alm de adicionar campos ou mtodos a uma subclasse, tambm possvel modificar ou
alterar o comportamento existente de um mtodo da (superclasse) me.
possvel especializar esse mtodo para descrever um objeto Manager.
Programao Java SE 7 4 - 7
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Substituindo Mtodos
Na classe Manager, ao criar um mtodo com a mesma
assinatura que o mtodo da classe Employee, voc est
substituindo o mtodo getDetails:
1 public class Manager extends Employee {
2 private String deptName;
3 // ... other fields and methods
4 public String getDetails () {
5 return super.getDetails () +
6 " Department: " + deptName;
7 }
8 }
Uma subclasse pode chamar um mtodo pai usando a palavra-
chave super.
Quando um mtodo substitudo, ele ocupa o lugar do mtodo na superclasse (me).
Esse mtodo chamado para qualquer instncia de Manager.
Uma chamada do form super.getDetails() chama o mtodo getDetails da classe
me.
Observao: Se, por exemplo, uma classe declara dois mtodos pblicos com o mesmo
nome e uma subclasse substitui um deles, a subclasse ainda herda o outro mtodo.
Programao Java SE 7 4 - 8
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Chamando um Mtodo Substitudo
Usando os exemplos anteriores de Employee e Manager:
Employee e = new Employee (101, "Jim Smith", "011-12-2345",
100_000.00);
Manager m = new Manager (102, "Joan Kern", "012-23-4567",
110_450.54, "Marketing");
System.out.println (e.getDetails());
System.out.println (m.getDetails());
O mtodo getDetails correto de cada classe chamado:
Employee id: 101 Employee name: Jim Smith
Employee id: 102 Employee name: Joan Kern Department: Marketing
Durante o runtime, a JVM (Java Virtual Machine) chama o mtodo getDetails da classe
apropriada. Se voc converter o mtodo getDetails em comentrio na classe Manager
mostrada no slide anterior, o que acontecer quando o objeto m.getDetails() for
chamado?
Resposta: Lembre-se de que os mtodos so herdados da classe me. Por isso, no runtime,
o mtodo getDetails da classe me (Employee) ser executado.
Programao Java SE 7 4 - 9
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Chamada de Mtodo Virtual
O que acontece quando voc tem o seguinte?
Employee e = new Manager (102, "Joan Kern", "012-23-4567",
110_450.54, "Marketing");
System.out.println (e.getDetails());
Durante a execuo, o tipo de runtime do objeto
determinado como sendo um objeto Manager:
Employee id: 102 Employee name: Joan Kern Department: Marketing
O compilador est satisfeito porque a classe Employee
tem um mtodo getDetails e, no runtime, um objeto
Manager faz referncia ao mtodo que executado.
Esse um aspecto do polimorfismo denominado chamada
de mtodo virtual.
Compilador e Comportamento de Runtime
importante lembrar a diferena entre o compilador (que verifica se cada mtodo e campo
est acessvel com base na definio estrita da classe) e o comportamento associado a um
objeto determinado no runtime.
Essa distino um aspecto importante do polimorfismo: O comportamento de um objeto
determinado por sua referncia de runtime.
Como o objeto que voc criou era um objeto Manager, no runtime, quando o mtodo
getDetails foi chamado, a referncia de runtime feita ao mtodo getDetails de uma
classe Manager, embora a varivel e seja do tipo Employee.
Esse comportamento conhecido como chamada de mtodo virtual.
Observao: Se voc um programador C++, obter esse comportamento em C++ somente
se marcar o mtodo usando a palavra-chave C++ virtual.
Programao Java SE 7 4 - 10
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Acessibilidade de Mtodos Substitudos
Um mtodo substitudo no pode ser menos acessvel que
o mtodo na classe me.
public class Employee {
//... other fields and methods
public String getDetails() { ... }
}
public class Manager extends Employee {
//... other fields and methods
private String getDetails() { //... }
}
public class OverriddingTest {
Employee e = new Manager(102, "Joan Kern", "012-23-4567",
110_450.54, "Marketing");
e.getDetails(); // illegal method is private
}
}
Para substituir um mtodo, necessrio que o nome e a ordem dos argumentos sejam
idnticos.
Se o acesso do mtodo Manager getDetails for alterado para private, somente essa
classe poder executar o mtodo. No entanto, a semntica de linguagem da execuo de
e.getDetails determina que o mtodo Manager getDetails seja executado. O resultado
um erro de runtime.
O que acontecer se voc tornar privado o mtodo Employee getDetails e tornar pblico
o mtodo Manager?
Resposta: O compilador verifica o tipo e, portanto, reclama que voc est tentando acessar
um mtodo privado em Employee.
Programao Java SE 7 4 - 11
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Aplicando o Polimorfismo
Suponha que voc seja solicitado a criar uma nova classe que
calcule uma concesso em aes para os funcionrios com
base no salrio e na funo (gerente, engenheiro ou
administrador):
1 public class EmployeeStockPlan {
2 public int grantStock (Manager m) {
3 // perform a calculation for a Manager
4 }
5 public int grantStock (Engineer e) {
6 // perform a calculation for an Engineer
7 }
8 public int grantStock (Admin a) {
9 // perform a calculation for an Admin
10 }
11 //... one method per employee type
12}
n

o

m
u
i
t
o
o
r
i
e
n
t
a
d
o

a

o
b
j
e
t
o
s
!
Problema de Design
Qual o problema no exemplo mostrado no slide? Cada mtodo efetua o clculo com base
no tipo de funcionrio especificado e retorna o nmero de aes.
Considere o que aconteceria se voc adicionasse mais dois ou trs tipos de funcionrio.
Seria preciso adicionar trs mtodos adicionais e, possivelmente, replicar cdigo
dependendo da lgica de negcios necessria para calcular as aes.
Claramente, essa no uma maneira adequada de tratar esse problema. Embora o cdigo
funcione, no ser de fcil leitura e provvel que crie bastante cdigo duplicado.
Programao Java SE 7 4 - 12
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Aplicando o Polimorfismo
Uma prtica recomendada especificar parmetros e criar
mtodos que usem a forma mais genrica possvel do seu
objeto.
public class EmployeeStockPlan {
public int grantStock (Employee e) {
// perform a calculation based on Employee data
}
}
// In the application class
EmployeeStockPlan esp = new EmployeeStockPlan ():
Manager m = new Manager ();
int stocksGranted = grantStock (m);
...
Use a Forma Mais Genrica
Uma prtica recomendada criar mtodos que usem a forma mais genrica possvel do seu
objeto.
Nesse caso, Employee uma classe bsica adequada para usar como ponto de partida.
Mas como voc sabe qual tipo de objeto especificado? A resposta est no prximo slide.
Programao Java SE 7 4 - 13
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Usando a Palavra-chave instanceof
A linguagem Java fornece a palavra-chave instanceof para
determinar o tipo de classe de um objeto no runtime.
1 public class EmployeeStockPlan {
2 public int grantStock (Employee e) {
3 // perform a calculation based on Employee data
4 if (e instanceof Manager) {
5 // process Manager stock grant
6 } else if (e instanceof Engineer) {
7 // process Engineer stock grant
8 } else if (e instanceof Admin) {
9 // process Admin stock grant
10 } else {
11 // perhaps an error a generic Employee?
12 }
13 }
14}
Nessa classe EmployeeStockPlan modificada, o mtodo grantStock usa instanceof
para determinar qual tipo de Employee foi especificado para o mtodo.
Outra abordagem desse problema usar o novo recurso no JDK 7 para ativar objetos String:
String type = emp.getClass().getSimpleName();
switch (type) {
case "Engineer":
// process Engineer grant
case "Admin":
// process Admin grant
case "Manager":
// process Manager grant
case "Director":
// process Director grant
default:
// error result
}
Programao Java SE 7 4 - 14
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Converso de Referncias de Objeto
Aps usar o operador instanceof para verificar se o
objeto que voc recebeu como argumento uma subclasse,
possvel acessar a funcionalidade completa do objeto
convertendo a referncia:
1 public void modifyDeptForManager (Employee e, String dept) {
2 if (e instanceof Manager) {
3 Manager m = (Manager) e;
4 m.setDeptName (dept);
5 }
6 }
Sem a converso em Manager, o mtodo setDeptName
no seria compilado.
Embora uma referncia de superclasse genrica seja til para especificar objetos, talvez seja
necessrio usar um mtodo da subclasse.
No slide, por exemplo, voc precisa do mtodo setDeptName da classe Manager. Para
satisfazer o compilador, possvel converter uma referncia da superclasse genrica na
classe especfica.
No entanto, h regras para converso de referncias. Isso mostrado no prximo slide.
Programao Java SE 7 4 - 15
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Regras de Converso
As converses ascendentes sempre so permitidas e no
exigem um operador de converso.
Director d = new Director();
Manager m = new Manager();
Employee e = m; // OK
Manager m = d; // OK
Employee e = d; // OK
Programao Java SE 7 4 - 16
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Regras de Converso
Para converses descendentes, o compilador precisa estar
convencido de que a converso , pelo menos, possvel.
Employee e = new Manager();
Manager m = new Manager();
Manager m = (Manager)e;
// Would also work if
// e was a Director obj
Director d = (Director)m;
// fails at run time
Engineer eng = (Engineer)m;
// compiler error
Converses Descendentes
Com uma converso descendente, o compilador simplesmente determina se a converso
possvel. Caso se trate da converso em uma subclasse, possvel que a converso tenha
sucesso.
Observe que, no runtime, a converso resultar em uma
java.lang.ClassCastException se a referncia de objeto for de uma superclasse e
no do tipo classe ou de uma subclasse.
A converso da varivel e em uma referncia Manager m satisfaz o compilador, pois
Manager e Employee esto na mesma hierarquia de classe e, por isso, a converso poder
ter sucesso. Essa converso tambm funciona no runtime, pois, na verdade, a varivel e
um objeto Manager. Essa converso tambm funcionaria no runtime se e apontasse para
uma instncia de um objeto Director.
A converso da varivel m em uma instncia de Director satisfaz o compilador. No entanto,
como m , na verdade, uma instncia de Manager, essa converso falhar no runtime com
uma ClassCastException.
Por fim, qualquer converso que esteja fora da hierarquia de classe falhar, como a
converso de uma instncia de Manager em Engineer. Um gerente (Manager) e um
engenheiro (Engineer) so ambos funcionrios, mas um gerente (Manager) no um
engenheiro (Engineer).
Programao Java SE 7 4 - 17
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Substituindo Mtodos de Objeto
Uma das vantagens da herana nica que, por default, toda
classe tem um objeto pai. A classe-raiz de toda classe Java
java.lang.Object.
No necessrio declarar que a sua classe estende
Object. O compilador faz isso para voc.
public class Employee { //... }
equivalente a:
public class Employee extends Object { //... }
A classe-raiz contm vrios mtodos no-finais, mas trs
para os quais importante considerar a substituio:
toString, equals e hashCode
Melhor Prtica: Sobrecarregar Mtodos de Objeto
A classe java.lang.Object a classe-raiz de todas as classes na linguagem de
programao Java. Por default, todas as classes subclassificaro Object.
Object define vrios mtodos no-finais que foram criados para serem substitudos pela sua
classe. So eles: equals, hashCode, toString, clone e finalize. H trs desses
mtodos para os quais voc deve considerar a substituio.
Programao Java SE 7 4 - 18
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Mtodo Object toString
O mtodo toString chamado sempre que uma instncia
da sua classe especificada para um mtodo que recebe um
objeto String, como println:
Employee e = new Employee (101, "Jim Kern", ...)
System.out.println (e);
possvel usar toString para fornecer informaes
sobre a instncia:
public String toString () {
return "Employee id: " + empId + "\n"
"Employee name:" + name;
}
Essa abordagem melhor para obter detalhes sobre a sua
classe do que criar o seu prprio mtodo getDetails.
Observao: Em alguns casos, voc desejar ter a possibilidade de imprimir o nome da
classe que est executando um mtodo. O mtodo getClass() um mtodo Object
utilizado para retornar uma instncia de objeto Class, e o mtodo getName() fornece o
nome totalmente qualificado da classe de runtime.
getClass().getName(); // returns the name of this class instance
Esses mtodos esto na classe Object.
Programao Java SE 7 4 - 19
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Mtodo Object equals
O mtodo Object equals compara somente referncias de objeto.
Se houver dois objetos x e y em uma classe, x ser igual a y
se, e somente se, x e y fizerem referncia ao mesmo objeto.
Exemplo:
Employee x = new Employee (1,"Sue","111-11-1111",10.0);
Employee y = x;
x.equals (y); // true
Employee z = new Employee (1,"Sue","111-11-1111",10.0);
x.equals (z); // false!
Como o que desejamos testar o contedo do objeto Employee,
precisamos substituir o mtodo equals:
public boolean equals (Object o) { ... }
O mtodo equals de Object determina (por default) somente se os valores de duas
referncias de objeto apontam para o mesmo objeto. Basicamente, o teste na classe Object
simplesmente o seguinte:
Se x == y, retornar true.
Para um objeto (como Employee) que contm valores, essa comparao no suficiente,
especialmente se desejarmos verificar se existe um e somente um funcionrio com um ID
especfico.
Programao Java SE 7 4 - 20
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Substituindo equals em Employee
Um exemplo de substituio do mtodo equals na classe
Employee compara cada campo quanto igualdade:
1 public boolean equals (Object o) {
2 boolean result = false;
3 if ((o != null) && (o instanceof Employee)) {
4 Employee e = (Employee)o;
5 if ((e.empId == this.empId) &&
6 (e.name.equals(this.name)) &&
7 (e.ssn.equals(this.ssn)) &&
8 (e.salary == this.salary)) {
9 result = true;
10 }
11 }
12 return result;
13 }
Esse teste equals simples verifica primeiro se o objeto especificado no nulo e, em
seguida, verifica se uma instncia de uma classe Employee (todas as subclasses tambm
so funcionrios; por isso, funciona). Em seguida, Object convertido em Employee, e
cada campo em Employee verificado quanto igualdade.
Observao: Para tipos de String, necessrio usar o mtodo equals para testar as
strings caractere por caractere quanto igualdade.
Programao Java SE 7 4 - 21
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Substituindo Object hashCode
O contrato geral de Object determina que, se dois objetos
forem considerados iguais (usando o mtodo equals),
o hashcode inteiro retornado para os dois objetos tambm
dever ser igual.
1 // Generated by NetBeans
2 public int hashCode() {
3 int hash = 7;
4 hash = 83 * hash + this.empId;
5 hash = 83 * hash + Objects.hashCode(this.name);
6 hash = 83 * hash + Objects.hashCode(this.ssn);
7 hash = 83 * hash + (int)
(Double.doubleToLongBits(this.salary) ^
(Double.doubleToLongBits(this.salary) >>> 32));
8 return hash;
9 }
Substituindo hashCode
A documentao Java da classe Objectdetermina:
"... Em geral, necessrio substituir o mtodo hashCodesempre que esse mtodo [equals]
substitudo, para manter o contrato geral do mtodo hashCode, que determina que objetos
iguais devem ter hashcodes iguais."
O mtodo hashCode utilizado em conjunto com o mtodo equals em conjuntos baseados
em hash, como HashMap, HashSet e Hashtable.
fcil errar com esse mtodo. Por isso, preciso ter cuidado. A boa notcia que IDEs,
como o NetBeans, podem gerar hashCode para voc.
Para criar a sua prpria funo hash, o seguinte procedimento ajudar a chegar a um valor
hash razovel para instncias iguais e no iguais:
1) Comece com uma constante inteira diferente de zero. Nmeros primos resultam em
menos colises de hashcode.
2) Para cada campo utilizado no mtodo equals, calcule um hashcode int para o
campo. Observe que, para Strings, possvel usar o hashCode de String.
3) Some os hashcodes calculados.
4) Retorne o resultado.
Programao Java SE 7 4 - 22
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Resumo
Nesta lio, voc aprendeu a:
Usar nveis de acesso: private, protected, default
e public
Substituir mtodos
Sobrecarregar construtores e outros mtodos
adequadamente
Usar o operador instanceof para comparar tipos
de objeto
Usar chamada de mtodo virtual
Usar converses ascendentes e descendentes
Substituir mtodos da classe Object
para melhorar a funcionalidade da sua
classe
Programao Java SE 7 4 - 23
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Quiz
Suponha que voc tenha uma classe Account com um
mtodo withdraw() e uma classe Checkingque estende
Accounte declara seu prprio mtodo withdraw(). Qual o
resultado do fragmento de cdigo a seguir?
1 Account acct = new Checking();
2 acct.withdraw(100);
a. O compilador reclama da linha 1.
b. O compilador reclama da linha 2.
c. Erros de runtime: designao incompatvel (linha 1)
d. O mtodo Account.withdraw() executado.
e. O mtodo Checking.withdraw() executado.
Programao Java SE 7 4 - 24
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Quiz
Suponha que voc tenha uma classe Account e uma classe
Checking que estenda Account. O corpo da instruo if na
linha 2 ser executado.
1 Account acct = new Checking();
2 if (acct instanceof Checking) { // will this block run? }
a. Verdadeiro
b. Falso
Programao Java SE 7 4 - 25
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Quiz
Suponha que voc tenha uma classe Account e uma classe
Checking que estenda Account. Voc tambm tem uma
classe Savings que estende Account. Qual o resultado do
cdigo a seguir?
1 Account acct1 = new Checking();
2 Account acct2 = new Savings();
3 Savings acct3 = (Savings)acct1;
a. acct3 contm a referncia a acct1.
b. Ocorre uma ClassCastException de runtime.
c. O compilador reclama da linha 2.
d. O compilador reclama da converso na linha 3.
Programao Java SE 7 4 - 26
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Quiz
1 package com.bank;
2 public class Account {
3 double balance;
4 }
10 package com.bank.type;
11 import com.bank.Account;
12 public class Savings extends Account {
13 private double interest;
14 Account acct = new Account();
15 public double getBalance (){ return (interest + balance); }
16 }
Qual alterao permitiria a compilao desse cdigo?
a. Tornar balance private na linha 3.
b. Tornar balance protected na linha 3.
c. Substituir balance por acct.balance na linha 15.
d. Substituir balance por Account.balance na
linha 15.
Programao Java SE 7 4 - 27
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Exerccio 4-1 Viso Geral:
Substituindo Mtodos e Aplicando Polimorfismo
Este exerccio abrange os seguintes tpicos:
Modificando as classes Employee, Manager e
Director; substituindo o mtodo toString()
Criando uma classe EmployeeStockPlan com um
mtodo de concesso de aes que usa a palavra-chave
instanceof
Programao Java SE 7 4 - 28
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Design de Classe Avanado
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Objetivos
Aps concluir esta lio, voc ser capaz de:
Criar classes bsicas de propsito geral usando classes
abstratas
Construir classes e subclasses Java abstratas
Modelar problemas de negcios usando as palavras-
chave static e final
Implementar o padro de design singleton
Distinguir entre classes aninhadas e de nvel mais alto
Programao Java SE 7 5 - 2
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Modelando Problemas de Negcios com Classes
Herana (ou criao de subclasses) um recurso essencial
da linguagem de programao Java. A herana permite a
reutilizao de cdigo por meio de:
Herana de mtodo: As subclasses evitam a duplicao
de cdigo por meio da herana de implementaes de
mtodos.
Generalizao: O cdigo criado para se basear no tipo
mais genrico possvel de mais fcil manuteno.
Diagrama de Herana de Classe
Herana de Classe
Ao criar uma soluo orientada a objetos, necessrio evitar a duplicao de cdigo. Uma
tcnica para evitar duplicao criar classes e mtodos de biblioteca. As bibliotecas
funcionam como ponto central de armazenamento de cdigo reutilizado com frequncia.
Outra tcnica para evitar duplicao de cdigo usar herana de classes. Quando h um
tipo bsico compartilhado identificado entre duas classes, qualquer cdigo compartilhado
pode ser inserido em uma classe me.
Quando possvel, use referncias de objeto do tipo bsico mais genrico possvel. Em Java,
a generalizao e a especializao permitem a reutilizao por meio de herana de mtodos
e chamada de mtodo virtual (VMI, virtual method invocation). A VMI, tambm denominada
ligao tardia, permite que o chamador chame um mtodo de forma dinmica, desde que o
mtodo tenha sido declarado em um tipo bsico genrico.
Programao Java SE 7 5 - 3
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Permitindo Generalizao
A codificao para um tipo bsico comum permite a introduo
de novas subclasses com pouca ou nenhuma modificao de
qualquer cdigo que dependa do tipo bsico mais genrico.
ElectronicDevice dev = new Television();
dev.turnOn(); // all ElectronicDevices can be turned on
Sempre use o tipo de referncia mais genrico possvel.
Codificando para Generalizao
Sempre use o tipo de referncia mais genrico possvel. Os IDEs Java podem conter
ferramentas de refatorao que ajudam a alterar referncias existentes para um tipo bsico
mais genrico.
Programao Java SE 7 5 - 4
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Identificando a Necessidade de Classes Abstratas
As subclasses podem no precisar herdar uma implementao
de mtodo se o mtodo for especializado.
public class Television extends ElectronicDevice {
public void turnOn() {
changeChannel(1);
initializeScreen();
}
public void turnOff() {}
public void changeChannel(int channel) {}
public void initializeScreen() {}
}
Implementaes de Mtodos
Quando classes irms tm um mtodo comum, ele geralmente inserido em uma classe
me. Em determinadas circunstncias, entretanto, a implementao da classe me sempre
precisar ser substituda por uma implementao especializada.
Nesses casos, a incluso do mtodo em uma classe me tem vantagens e desvantagens.
Ela permite o uso de tipos de referncia genricos, mas os desenvolvedores podem se
esquecer facilmente de fornecer a implementao especializada nas subclasses.
Programao Java SE 7 5 - 5
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Definindo Classes Abstratas
Uma classe pode ser declarada como abstrata por meio do
modificador de nvel de classe abstract.
public abstract class ElectronicDevice { }
possvel subclassificar uma classe abstrata.
public class Television extends ElectronicDevice { }
No possvel instanciar uma classe abstrata.
ElectronicDevice dev = new ElectronicDevice(); // error
Declarar uma classe como abstrata impede a criao de instncias dessa classe. um erro
de tempo de compilao instanciar uma classe abstrata. Em geral, uma classe estendida
por uma classe filha e pode ser usada como tipo de referncia.
Programao Java SE 7 5 - 6
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Definindo Mtodos Abstratos
Um mtodo pode ser declarado como abstrato por meio do
modificador de nvel de mtodo abstract.
public abstract class ElectronicDevice {
public abstract void turnOn();
public abstract void turnOff();
}
Um mtodo abstrato:
No pode ter um corpo de mtodo
Precisa ser declarado em uma classe abstrata
substitudo em subclasses
Sem chaves
Herdando Mtodos Abstratos
Quando uma classe filha herda um mtodo abstrato, ela est herdado uma assinatura de
mtodo, mas nenhuma implementao. Por esse motivo, no so permitidas chaves ao
definir um mtodo abstrato.
Um mtodo abstrato uma maneira de garantir que qualquer classe filha contenha um
mtodo com uma assinatura correspondente.
Programao Java SE 7 5 - 7
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Validando Classes Abstratas
As seguintes regras adicionais so aplicadas quando voc usa
classes e mtodos abstratos:
Uma classe abstrata pode ter qualquer nmero de
mtodos abstratos e no abstratos.
Na herana de uma classe abstrata, necessrio executar
um destes procedimentos:
Declarar a classe filha como abstrata.
Substituir todos os mtodos abstratos herdados da classe
me. Se isso no for feito, ocorrer um erro de tempo de
compilao.
error: Television is not abstract and does not override
abstract method turnOn() in ElectronicDevice
Usando Classes Abstratas
Embora seja possvel evitar a implementao de um mtodo abstrato declarando classes
filhas como abstratas, isso apenas adia o inevitvel. As aplicaes exigem mtodos
no abstratos para criar objetos. Use mtodos abstratos para descrever a funcionalidade
necessria em classes filhas.
Programao Java SE 7 5 - 8
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Quiz
Para que seja compilado com sucesso, um mtodo abstrato
no pode ter:
a. Um valor de retorno
b. Uma implementao de mtodo
c. Parmetros de mtodo
d. Acesso private
Programao Java SE 7 5 - 9
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Palavra-chave static
O modificador static usado para declarar campos e
mtodos como recursos do nvel da classe. Membros de classe
estticos:
Podem ser utilizados sem instncias de objeto
So utilizados quando um problema melhor resolvido
sem objetos
So utilizados quando objetos do mesmo tipo precisam
compartilhar campos
No devem ser utilizados para ignorar os recursos
orientados a objetos do Java, a menos que haja um bom
motivo
Java: Orientada a Objetos por Design
A linguagem de programao Java foi criada como uma linguagem orientada a objetos,
diferentemente de linguagens como Objective-C e C++, que herdaram o design procedural
do C. Ao desenvolver em Java, necessrio sempre tentar criar uma soluo orientada a
objetos.
Programao Java SE 7 5 - 10
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Mtodos Estticos
Mtodos estticos so aqueles que podem ser chamados
mesmo que a classe em que so declarados no tenha sido
instanciada. Mtodos estticos:
So chamados de mtodos de classe
So teis para APIs que no so orientadas a objetos.
java.lang.Math contm vrios mtodos estticos
So comumente utilizados no lugar de construtores para
executar tarefas relacionadas inicializao de objetos
No podem acessar membros no estticos na mesma
classe
Podem ser ocultados em subclasses, mas no
substitudos
Sem chamada de mtodo virtual
Mtodos de Fbrica
Em vez de chamar construtores diretamente, voc normalmente usar mtodos estticos
para recuperar referncias de objeto. A menos que algo inesperado ocorra, um novo objeto
criado sempre que um construtor chamado. Um mtodo de fbrica esttico poderia manter
um cache de objetos para reutilizar ou criar novas instncias se o cache fosse esvaziado. Um
mtodo de fbrica tambm pode produzir um objeto que subclassifica o tipo de retorno do
mtodo.
Exemplo:
NumberFormat nf = NumberFormat.getInstance();
Programao Java SE 7 5 - 11
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Implementando Mtodos Estticos
public class StaticErrorClass {
private int x;
public static void staticMethod() {
x = 1; // compile error
instanceMethod(); // compile error
}
public void instanceMethod() {
x = 2;
}
}
Limitaes de Mtodos Estticos
Os mtodos estticos podem ser utilizados antes de serem criadas as instncias da classe
que os contm. Em termos cronolgicos, isso significa que, em uma JVM (Java Virtual
Machine) em execuo, no pode haver ocorrncias das variveis de instncia das classes
recipientes. Os mtodos estticos nunca podem acessar variveis de instncia da classe que
os contm ou chamar seus mtodos no estticos.
Programao Java SE 7 5 - 12
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Chamando Mtodos Estticos
double d = Math.random();
StaticUtilityClass.printMessage();
StaticUtilityClass uc = new StaticUtilityClass();
uc.printMessage(); // works but misleading
sameClassMethod();
Ao chamar mtodos estticos, necessrio:
Qualificar o local do mtodo com um nome de classe se o
mtodo estiver localizado em uma classe que no seja a
chamadora
No necessrio para mtodos da mesma classe
Evitar usar uma referncia de objeto para chamar um
mtodo esttico
Programao Java SE 7 5 - 13
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Variveis Estticas
Variveis estticas so aquelas que podem ser acessadas
mesmo que a classe em que so declaradas no tenha sido
instanciada. As variveis estticas so:
Chamadas de variveis de classe
Limitadas a uma nica cpia por JVM
teis para armazenar dados compartilhados
Os mtodos estticos armazenam dados em variveis
estticas.
Todas as instncias de objeto compartilham uma nica cpia
das variveis estticas.
Inicializadas quando a classe recipiente carregada pela
primeira vez
Carregamento de Classes
As classes fornecidas pelo desenvolvedor de aplicaes so, normalmente, carregadas
sob demanda (primeira utilizao). As variveis estticas so inicializadas quando a classe
que as contm carregada. Uma tentativa de acessar um membro de classe esttico pode
acionar o carregamento de uma classe.
Programao Java SE 7 5 - 14
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Definindo Variveis Estticas
public class StaticCounter {
private static int counter = 0;
public StaticCounter() {
counter++;
}
public static int getCount() {
return counter;
}
}
Somente uma
cpia na memria
Tornando Variveis Estticas Persistentes
Vrias tecnologias que so utilizadas para tornar persistente o estado da aplicao em Java
somente salvam variveis de instncia. A manuteno de um nico objeto que mantm o
controle do estado compartilhado pode ser utilizada como uma alternativa a variveis
estticas.
Programao Java SE 7 5 - 15
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Usando Variveis Estticas
double p = Math.PI;
new StaticCounter();
new StaticCounter();
System.out.println("count: " + StaticCounter.getCount());
Ao acessar variveis estticas, necessrio:
Qualificar o local da varivel com um nome de classe se a
varivel estiver localizada em uma classe que no seja a
chamadora
No necessrio para variveis da mesma classe
Evitar usar uma referncia de objeto para acessar uma
varivel esttica
Referncias de Objeto a Membros Estticos
Da mesma forma que necessrio evitar o uso de referncias de objeto a membros
estticos, tambm deve ser evitado o uso de referncias de objeto para acessar variveis
estticas. Se todos os membros de uma classe forem estticos, considere a possibilidade de
usar um construtor privado para impedir a instanciao de objetos.
Programao Java SE 7 5 - 16
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Importaes Estticas
Uma instruo de importao esttica torna os membros
estticos de uma classe disponveis com seu nome simples.
Considerando-se uma das seguintes linhas:
import static java.lang.Math.random;
import static java.lang.Math.*;
A chamada ao mtodo Math.random()pode ser escrita
da seguinte forma:
public class StaticImport {
public static void main(String[] args) {
double d = random();
}
}
O uso excessivo de importao esttica pode prejudicar a leitura do cdigo. Evite adicionar
vrias importaes estticas a uma classe.
Programao Java SE 7 5 - 17
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Quiz
O nmero de instncias de uma varivel esttica est
relacionado ao nmero de objetos que foram criados.
a. Verdadeiro
b. Falso
Programao Java SE 7 5 - 18
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Mtodos Finais
Um mtodo pode ser declarado final. Os mtodos finais no
podem ser substitudos.
public class MethodParentClass {
public final void printMessage() {
System.out.println("This is a final method");
}
}
public class MethodChildClass extends MethodParentClass {
// compile-time error
public void printMessage() {
System.out.println("Cannot override method");
}
}
Mitos de Desempenho
H pouco ou nenhum benefcio de desempenho na declarao de um mtodo como final. Os
mtodos devem ser declarados como finais somente para desativar a substituio de
mtodos.
Programao Java SE 7 5 - 19
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Classes Finais
Uma classe pode ser declarada final. As classes finais no
podem ser estendidas.
public final class FinalParentClass { }
// compile-time error
public class ChildClass extends FinalParentClass { }
Programao Java SE 7 5 - 20
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Variveis Finais
O modificador final pode ser aplicado a variveis. As
variveis finais no podem mudar seus valores depois que
so inicializadas. As variveis finais podem ser:
Campos de classe
Campos finais com expresses constantes de tempo de
compilao so variveis constantes.
possvel combinar static com final para criar uma varivel
que nunca muda e est sempre disponvel.
Parmetros de mtodo
Variveis locais
Observao: As referncias finais sempre devem se referir
ao mesmo objeto, mas o contedo desse objeto pode ser
modificado.
Benefcios e Desvantagens das Variveis Finais
Preveno contra Bugs
As variveis finais nunca podem ter seus valores modificados depois que so inicializadas.
Esse comportamento funciona como um mecanismo de preveno contra bugs.
Segurana do Thread
A natureza imutvel das variveis finais elimina as preocupaes inerentes ao acesso
concorrente por vrios threads.
Referncia Final a Objetos
Uma referncia de objeto final serve apenas para impedir que uma referncia aponte para
outro objeto. Se voc estiver criando objetos imutveis, dever impedir que os campos do
objeto sejam modificados. As referncias finais tambm impedem que voc designe um valor
null referncia. A manuteno das referncias de um objeto impede que o objeto fique
disponvel para coleta de lixo.
Programao Java SE 7 5 - 21
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Declarando Variveis Finais
public class VariableExampleClass {
private final int field;
private final int forgottenField;
private final Date date = new Date();
public static final int JAVA_CONSTANT = 10;
public VariableExampleClass() {
field = 100;
}
public void changeValues(final int param) {
param = 1; // compile-time error
date.setTime(0); // allowed
date = new Date(); // compile-time error
final int localVar;
localVar = 42;
localVar = 43; // compile-time error
}
}
Campos Finais
Inicializando
Os campos finais (variveis de instncia) devem ter um dos seguintes valores:
Um valor designado quando for declarado
Um valor designado em cada construtor
Combinao de Esttico e Final
Um campo que esttico e final considerado uma constante. Por conveno, os campos
de constante usam identificadores compostos somente de letras maisculas e caracteres de
sublinhado.
Programao Java SE 7 5 - 22
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Quiz
Um campo final (varivel de instncia) podem ter um valor
designado quando for declarado ou em todos os construtores.
a. Verdadeiro
b. Falso
Programao Java SE 7 5 - 23
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Quando Evitar Constantes
As variveis public static finalpodem ser muito teis,
mas h um padro de uso especfico que voc deve evitar. As
constantes podem fornecer uma noo falsa de validao de
entrada ou verificao de faixa de valores.
Considere um mtodo que deve receber somente um dos
trs valores possveis:
Computer comp = new Computer();
comp.setState(Computer.POWER_SUSPEND);
Ainda assim, as seguintes linhas de cdigo sero
compiladas:
Computer comp = new Computer();
comp.setState(42);
Esta uma constante
int que igual a 2.
Verificao de Faixa de Runtime
No exemplo mostrado no slide, necessrio executar uma verificao de faixa de runtime ao
usar um int para representar o estado. No mtodo setState, possvel usar uma
instruo if para verificar se somente os valores 0, 1 ou 2 so aceitos. Esse tipo de
verificao executado toda vez que o mtodo setState chamado, resultando em
overhead adicional.
Programao Java SE 7 5 - 24
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Enumeraes Typesafe
O Java 5 adicionou uma enumerao typesafe linguagem.
As enumeraes:
So criadas por meio de uma variao de uma classe Java
Fornecem uma verificao de faixa de tempo de compilao
public enum PowerState {
OFF,
ON,
SUSPEND;
}
Uma enumerao pode ser utilizada da seguinte maneira:
Computer comp = new Computer();
comp.setState(PowerState.SUSPEND); Este mtodo recebe uma
referncia PowerState.
Estas so referncias aos trs
nicos objetos PowerState
que podem existir.
Verificao de Faixa de Tempo de Compilao
No exemplo mostrado no slide, o compilador executa uma verificao de tempo de
compilao para garantir que somente instncias vlidas de PowerState sejam
especificadas para o mtodo setState. No h overhead de verificao de faixa no
runtime.
Programao Java SE 7 5 - 25
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Uso de Enumerao
As referncias de enumerao podem ser importadas de forma
esttica.
import static com.example.PowerState.*;
public class Computer extends ElectronicDevice {
private PowerState powerState = OFF;
//...
}
As enumeraes podem ser utilizadas como a expresso em
uma instruo switch.
public void setState(PowerState state) {
switch(state) {
case OFF:
//...
}
}
Importada de forma esttica
PowerState.OFF
Programao Java SE 7 5 - 26
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Enumeraes Complexas
As enumeraes podem ter construtores privados, campos
e mtodos.
public enum PowerState {
OFF("The power is off"),
ON("The usage power is high"),
SUSPEND("The power usage is low");
private String description;
private PowerState(String d) {
description = d;
}
public String getDescription() {
return description;
}
}
O construtor no pode ser
public nem protected.
Chame um construtor
PowerState para inicializar a
referncia public static
final OFF.
Construtores de Enumerao
No possvel instanciar uma instncia de enumerao com new.
Programao Java SE 7 5 - 27
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Quiz
Uma enumerao pode ter um construtor com os seguintes
nveis de acesso:
a. public
b. protected
c. Default (nenhum nvel de acesso declarado)
d. private
Programao Java SE 7 5 - 28
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Padres de Design
Os padres de design so:
Solues reutilizveis para problemas comuns
de desenvolvimento de software
Documentados em catlogos de padres
Design Patterns: Elements of Reusable Object-Oriented
Software, escrito por Erich Gamma et al. (Gang of Four)
Um vocabulrio utilizado para discutir design
Catlogos de Padres de Design
H catlogos de padres disponveis para vrias linguagens de programao. A maioria dos
padres de design tradicionais se aplica a qualquer linguagem orientada a objetos. Um dos
livros mais conhecidos, Design Patterns: Elements of Reusable Object-Oriented Software,
usa uma combinao de C++, Smalltalk e diagramas para mostra possveis implementaes
de padres. Vrios desenvolvedores Java ainda consultam esse livro porque os conceitos se
aplicam a qualquer linguagem orientada a objetos.
Aprenda mais sobre padres de design e outras prticas recomendadas Java no curso Java
Design Patterns.
Programao Java SE 7 5 - 29
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Padro Singleton
O padro de design singleton descreve em detalhes uma
implementao de classe que pode ser instanciada apenas
uma vez.
public class SingletonClass {
private static final SingletonClass instance =
new SingletonClass();
private SingletonClass() {}
public static SingletonClass getInstance() {
return instance;
}
}
1
2
3
Implementando o Padro Singleton
O padro de design singleton um dos padres de design de criao categorizados em
Design Patterns: Elements of Reusable Object-Oriented Software.
Para implementar o padro de design singleton:
1. Use uma referncia esttica para apontar instncia especfica. Tornar a referncia
final garante que ela nunca far referncia a outra instncia.
2. Adicione um nico construtor privado classe singleton. O modificador privado permite
somente o acesso "mesma classe", o que probe qualquer tentativa de instanciar a
classe singleton, exceto para a tentativa da etapa 1.
3. Um mtodo de fbrica pblico retorna uma cpia da referncia singleton. Esse mtodo
declarado esttico para acessar o campo esttico declarado na etapa 1. Essa etapa
poderia usar uma varivel pblica, eliminando a necessidade do mtodo de fbrica. Os
mtodos de fbrica oferecem mais flexibilidade (por exemplo, implementando uma
soluo singleton por thread) e costumam ser utilizados na maioria das implementaes
singleton.
Para obter uma referncia singleton, chame o mtodo getInstance:
SingletonClass ref = SingletonClass.getInstance();
Programao Java SE 7 5 - 30
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Classes Aninhadas
Uma classe aninhada uma classe declarada no corpo
de outra classe. Classes aninhadas:
Tm vrias categorias
Classes internas
Classes de membro
Classes locais
Classes annimas
Classe aninhadas estticas
So comumente utilizadas em aplicaes com elementos
de GUI
Podem limitar a utilizao de uma "classe assistente"
classe de nvel mais alto que a contm
Motivos para Usar Classes Aninhadas
As informaes a seguir foram obtidas em
http://download.oracle.com/javase/tutorial/java/javaOO/nested.html.
Agrupamento Lgico de Classes
Se uma classe for til apenas para uma outra classe, lgico incorpor-la nessa classe e
manter as duas classes juntas. O aninhamento dessas "classes assistentes" torna seu pacote
mais eficiente.
Encapsulamento Ampliado
Considere duas classes de nvel mais alto, A e B, onde B precisa ter acesso a membros de A
que, do contrrio, seriam declarados como privados. Ao ocultar a classe B na classe A,
possvel declarar membros de A como privados e B pode acess-los. Alm disso, a prpria
classe B pode ser ocultada do mundo exterior.
Cdigo de Leitura e Manuteno Mais Fceis
O aninhamento de classes pequenas em classes de nvel mais alto coloca o cdigo mais
perto de onde utilizado.
Programao Java SE 7 5 - 31
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Classe Interna: Exemplo
public class Car {
private boolean running = false;
private Engine engine = new Engine();
private class Engine {
public void start() {
running = true;
}
}
public void start() {
engine.start();
}
}
Classes Internas e Classes Aninhadas Estticas
Uma classe interna considerada parte da classe externa e herda o acesso a todos os
membros privados da classe externa. O exemplo do slide mostra uma classe interna, que
uma classe membro. Tambm possvel declarar classes internas em um bloco de mtodo
(classes locais).
Uma classe aninhada esttica no uma classe interna, mas sua declarao se assemelha a
um modificador static adicional na classe aninhada. As classes aninhadas estticas
podem ser instanciadas antes da classe externa que as contm e, portanto, ter acesso
negado a todos os membros no estticos da classe que as contm.
Programao Java SE 7 5 - 32
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Classes Internas Annimas
Uma classe annima utilizada para definir uma classe sem
nome.
public class AnonymousExampleClass {
public Object o = new Object() {
@Override
public String toString() {
return "In an anonymous class method";
}
};
}
Uma Classe Sem Nome
No exemplo mostrado no slide, a classe java.lang.Object est sendo subclassificada, e
essa subclasse que est sendo instanciada. Quando voc compilar uma aplicao com
classes annimas, ser gerado um arquivo de classe separado seguindo a conveno de
nomeao Outer$1.class, onde 1 o nmero de ndice de classes annimas em uma
classe recipiente e Outer o nome da classe recipiente.
Classes internas annimas tambm podem ser classes locais.
Programao Java SE 7 5 - 33
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Quiz
Qual dos seguintes tipos de classe aninhada so classes
internas?
a. annimo
b. local
c. esttico
d. membro
Programao Java SE 7 5 - 34
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Resumo
Nesta lio, voc aprendeu a:
Criar classes bsicas de propsito geral usando classes
abstratas
Construir classes e subclasses Java abstratas
Modelar problemas de negcios usando as palavras-chave
static e final
Implementar o padro de design singleton
Distinguir entre classes aninhadas e de nvel mais alto
Programao Java SE 7 5 - 35
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Exerccio 5-1 Viso Geral:
Aplicando a Palavra-chave Abstrata
Este exerccio abrange os seguintes tpicos:
Identificando possveis problemas que podem ser
resolvidos com o uso de classes abstratas
Refatorando uma aplicao Java existente para usar
classes e mtodos abstratos
Programao Java SE 7 5 - 36
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Exerccio 5-2 Viso Geral:
Aplicando o Padro de Design Singleton
Este exerccio abrange o uso das palavras-chave static e final
e a refatorao de uma aplicao existente para implementar o
padro de design singleton.
Programao Java SE 7 5 - 37
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Exerccio 5-3 (Opcional) Viso Geral:
Usando Enumeraes Java
Este exerccio abrange a refatorao do cdigo de uma
aplicao existente para usar uma enumerao.
Programao Java SE 7 5 - 38
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Exerccio 5-4 (Opcional) Viso Geral:
Reconhecendo Classes Aninhadas
Este exerccio abrange a anlise de uma aplicao Java
existente e a identificao do nmero e dos tipos de classes
presentes.
Programao Java SE 7 5 - 39
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Herana com Interfaces Java
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Objetivos
Aps concluir esta lio, voc ser capaz de:
Modelar problemas de negcios usando interfaces
Definir uma interface Java
Escolher entre herana de interface e de classe
Estender uma interface
Refatorar o cdigo para implementar o padro DAO
Programao Java SE 7 6 - 2
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Substituio de Implementao
A capacidade de descrever tipos abstratos um recurso
avanado do Java. A abstrao permite:
Fcil manuteno
possvel substituir classes com erros lgicos por classes
novas e melhores.
Substituio de implementao
O pacote java.sql descreve os mtodos utilizados por
desenvolvedores para se comunicarem com bancos de
dados, mas a implementao especfica do fornecedor.
Diviso do trabalho
A descrio da API de negcios necessria para a UI de
uma aplicao permite o desenvolvimento conjunto da UI
e da lgica de negcios.
Abstrao
Voc acabou de aprender a definir tipos abstratos por meio de classes. Existem duas maneiras
de definir a abstrao de tipo em Java: classes e interfaces abstratas. Ao escrever o cdigo para
fazer referncia a tipos abstratos, voc no depende mais de classes de implementao
especficas. A definio desses tipos abstratos pode parecer trabalho extra no incio, mas pode
reduzir a refatorao posteriormente se for utilizada da forma adequada.
Programao Java SE 7 6 - 3
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Interfaces Java
As interfaces Java so utilizadas para definir tipos abstratos.
As interfaces:
Assemelham-se a classes abstratas que contm somente
mtodos abstratos pblicos
Descrevem mtodos que precisam ser implementados por
uma classe
Os mtodos no devem ter uma implementao {chaves}.
Podem conter campos de constante
Podem ser utilizadas como tipo de referncia
So componente essencial de vrios padres de design
Em Java, uma interface descreve um contrato para uma classe. O contrato descrito por uma
interface determina os mtodos que devem ser implementados em uma classe. As classes que
implementam o contrato devem cumprir todo o contrato ou ser declaradas abstract.
Programao Java SE 7 6 - 4
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Desenvolvendo Interfaces Java
As interfaces pblicas de nvel mais alto so declaradas em
seu prprio arquivo .java. Voc implementa as interfaces,
em vez de estend-las.
public interface ElectronicDevice {
public void turnOn();
public void turnOff();
}
public class Television implements ElectronicDevice {
public void turnOn() { }
public void turnOff() { }
public void changeChannel(int channel) {}
private void initializeScreen() {}
}
Regras de Interfaces
Modificadores de Acesso
Todos os mtodos em uma interface so public, mesmo que voc se esquea de declar-las
como public. No possvel declarar mtodos como private ou protected em uma
interface. O contrato descrito por uma interface uma API pblica que deve ser fornecida por
uma classe.
Modificador Abstrato
Como todos os mtodos so implicitamente abstratos (abstract), redundante (porm,
permitido) declarar um mtodo abstract. Como todos os mtodos de interface so abstratos,
no possvel fornecer uma implementao de mtodo, nem mesmo um conjunto vazio de
chaves.
Implementaes e Extenses
Uma classe pode estender uma classe me e, em seguida, implementar uma lista de interfaces
separadas por vrgula.
Programao Java SE 7 6 - 5
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Campos de Constante
As interfaces podem ter campos de constante.
public interface ElectronicDevice {
public static final String WARNING =
"Do not open, shock hazard";
public void turnOn();
public void turnOff();
}
Somente campos de constante so permitidos em uma interface. Quando voc declara um campo
em uma interface, ele implicitamente public, static e final. possvel especificar esses
modificadores de forma redundante. Evite agrupar todos os valores de constante de uma
aplicao em uma nica interface. Um bom design distribui os valores de constante de uma
aplicao entre vrias classes e interfaces. A criao de classes monolticas ou de interfaces que
contm grandes agrupamentos de cdigo no relacionado no segue as melhores prticas para
design orientado a objetos.
Programao Java SE 7 6 - 6
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Referncias de Interface
possvel usar uma interface como um tipo de referncia.
Ao usar um tipo de referncia de interface, necessrio usar
somente os mtodos descritos na interface.
ElectronicDevice ed = new Television();
ed.turnOn();
ed.turnOff();
ed.changeChannel(2); // fails to compile
String s = ed.toString();
Somente possvel usar uma referncia de tipo de interface para fazer referncia a um objeto
que implementa essa interface. Se um objeto tiver todos os mtodos descritos na interface, mas
no implementar a interface, no ser possvel usar a interface como um tipo de referncia desse
objeto. As interfaces incluem implicitamente todos os mtodos de java.lang.Object.
Programao Java SE 7 6 - 7
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Operador instanceof
possvel usar instanceof com interfaces.
Television t = new Television();
if (t instanceof ElectronicDevice) { }
Television uma instncia de um ElectronicDevice.
Implementa
Anteriormente, voc usou instanceof em tipos de classe. Qualquer tipo que possa ser utilizado
como uma referncia pode ser utilizado com um operando do operador instanceof. No slide,
Television implementa ElectronicDevice. Por isso, Television uma instncia de
Television, ElectronicDevice e java.lang.Object.
Programao Java SE 7 6 - 8
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Interfaces Marcadoras
As interfaces marcadoras definem um tipo, mas no
descrevem os mtodos que precisam ser implementados
por uma classe.
public class Person implements java.io.Serializable { }
O nico motivo da existncia desses tipos de interface a
verificao de tipo.
Person p = new Person();
if (p instanceof Serializable) {
}
java.io.Serializable uma interface marcadora utilizada pela biblioteca de E/S do Java
para determinar se possvel serializar o estado de um objeto. Ao implementar Serializable,
no necessrio fornecer implementaes de mtodo. O teste (na forma do operador
instanceof) de seriabilidade de um objeto criado nas biblioteca de E/S padro. Voc usa
essa interface na lio Fundamentos de E/S do Java.
Programao Java SE 7 6 - 9
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Fazendo a Converso em Tipos de Interface
possvel fazer a converso em um tipo de interface.
public static void turnObjectOn(Object o) {
if (o instanceof ElectronicDevice) {
ElectronicDevice e = (ElectronicDevice)o;
e.turnOn();
}
}
Diretrizes de Converso
Da mesma forma que voc faria ao realizar a converso em tipos de classe, se fizer a converso
em um tipo que no seja vlido para esse objeto, a sua aplicao gerar uma exceo e,
provavelmente, falhar. Para verificar se uma converso ter sucesso, voc deve usar um teste
de instanceof.
O exemplo no slide mostra um design inadequado, pois o mtodo turnObjectOn() opera
somente em instncias de ElectronicDevice. O uso de instanceof e de converso
aumenta o overhead no runtime. Quando possvel, use um teste de tempo de compilao
reescrevendo o mtodo da seguinte maneira:
public static void turnObjectOn(ElectronicDevice e) {
e.turnOn();
}
Programao Java SE 7 6 - 10
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Usando Tipos de Referncia Genricos
Use o tipo mais genrico de referncia onde for possvel:
EmployeeDAO dao = new EmployeeDAOMemoryImpl();
dao.delete(1);
Ao usar um tipo de referncia de interface, possvel usar
uma classe de implementao diferente sem correr o risco
de romper linhas de cdigo subsequentes:
EmployeeDAOMemoryImpl dao = new EmployeeDAOMemoryImpl();
dao.delete(1);
possvel que voc esteja usando mtodos somente da
classe EmployeeDAOMemoryImpl aqui.
EmployeeDAOMemoryImpl implementa
EmployeeDAO
Ao criar referncias, necessrio usar o tipo mais genrico possvel. Isso significa que, para o
objeto que voc est instanciando, necessrio declarar a referncia como do tipo interface ou
classe me. Com isso, toda a utilizao da referncia no fica vinculada a uma classe de
implementao especfica e, se voc precisar, poder usar outra classe de implementao. Com
o uso de uma interface que vrias classes implementam como o tipo de referncia, voc tem a
liberdade de alterar a implementao sem afetar o seu cdigo. Uma referncia do tipo
EmployeeDAOMemoryImplpoder ser utilizada para chamar um mtodo que aparece somente
na classe EmployeeDAOMemoryImpl.
As referncias com tipo de um classe especfica tornam a operao do cdigo mais dependente
dessa classe e podem causar maior refatorao do seu cdigo ao alterar implementaes.
Programao Java SE 7 6 - 11
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Implementando e Estendendo
As classes podem estender uma classe me e implementar
uma interface:
public class AmphibiousCar extends BasicCar implements
MotorizedBoat { }
Tambm possvel implementar vrias interfaces:
public class AmphibiousCar extends BasicCar implements
MotorizedBoat, java.io.Serializable { }
Use uma vrgula para separar a
sua lista de interfaces.
Extenses Primeiro
Se voc usar as clusulasextends e implements, as clusulas extends devero vir primeiro.
Programao Java SE 7 6 - 12
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Estendendo Interfaces
As interfaces podem estender outras interfaces:
public interface Boat { }
public interface MotorizedBoat extends Boat { }
Com a implementao de MotorizedBoat, a classe
AmphibiousCar precisa cumprir o contrato descrito por
MotorizedBoat e Boat:
public class AmphibiousCar extends BasicCar implements
MotorizedBoat, java.io.Serializable { }
Programao Java SE 7 6 - 13
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Interfaces em Hierarquias de Herana
Estende Implementa
Heranas de Interface
As interfaces so utilizadas para um tipo de herana conhecido como herana de interface. O
Java permite herana mltipla de interface, mas somente herana nica de classe.
Estendendo uma Classe de Implementao
Se voc escrever uma classe que estenda outra que implementa uma interface, a classe que
voc criou tambm implementar a interface. Por exemplo, AmphibiousCar estende BasicCar.
BasicCar implementa Car. Por isso, AmphibiousCar tambm implementa Car.
Interfaces Estendendo Interfaces
Uma interface pode estender outra interface. Por exemplo, a interface MotorizedBoat pode
estender a interface Boat. Se a classe AmphibiousCar implementar MotorizedBoat, dever
implementar todos os mtodos de Boat e MotorizedBoat.
Mtodos Duplicados
Quando uma classe implementa vrias interfaces, direta ou indiretamente, a mesma assinatura
de mtodo pode aparecer em diversas interfaces implementadas. Se a assinatura for igual, no
haver conflito e ser necessria apenas uma implementao.
Programao Java SE 7 6 - 14
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Quiz
Uma classe pode implementar vrias interfaces.
a. Verdadeiro
b. Falso
Programao Java SE 7 6 - 15
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Padres de Design e Interfaces
Um dos princpios do design orientado a objetos :
Programar para uma interface, no para uma implementao.
Esse um tema comum em muitos padres de design. Esse
princpio tem um papel importante no:
Padro de design DAO
Padro de design factory
Princpios do Design Orientado a Objetos
Programar para uma interface, e no para uma implementao uma prtica que se tornou
popular com o livro Design Patterns: Elements of Reusable Object-Oriented Software.
Aprenda mais sobre os princpios do design orientado a objetos e os padres de design no curso
Java Design Patterns (Padres de Design Java).
Programao Java SE 7 6 - 16
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Padro DAO
O padro DAO (Data Access Object) utilizado na criao de
uma aplicao que precisa tornar informaes persistentes. O
padro DAO:
Separa o domnio do problema do mecanismo de
persistncia
Usa uma interface para definir os mtodos utilizados para
persistncia. Uma interface permite que a implementao
da persistncia seja substituda por:
DAOs baseados em memria como uma soluo temporria
DAOs baseados em arquivo para uma verso inicial
DAOs baseados em JDBC para oferecer suporte
persistncia de banco de dados
DAOs baseados em JAP (Java Persistence API) para
oferecer suporte persistncia de banco de dados
Por Que Separar Cdigo de Negcios e Cdigo de Persistncia?
Alm da funcionalidade necessria de uma aplicao, outras preocupaes tambm influenciam
o design das suas classes. O desejo de ter facilidade de manuteno e capacidade de aprimorar
uma aplicao tambm influencia o design. O cdigo modular que separados por funcionalidade
mais fcil de atualizar e manter.
Com a separao da lgica de negcios e de persistncia, as aplicaes ficam mais fceis de
implementar e manter custa classes e interfaces adicionais. Em geral, esses dois tipos de lgica
tm ciclos de manuteno diferentes. Por exemplo, talvez seja necessrio modificar a lgica de
persistncia se o banco de dados utilizado pela aplicao tiver sido migrado do MySQL para o
Oracle 11g.
Se voc criar interfaces para as classes que contm a lgica de persistncia, ser mais fcil
substituir a sua implementao da persistncia.
Programao Java SE 7 6 - 17
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Antes do Padro DAO
Observe os mtodos de persistncia combinados com os
mtodos de negcios.
Antes do padro DAO
O Princpio da Responsabilidade nica
A classe Employee mostrada no slide tem mtodos que se concentram em dois princpios ou
preocupaes distintas. Um conjunto de mtodos se concentra na manipulao da representao
de uma pessoa, e o outro lida com objetos Employee persistentes. Como esses dois conjuntos
de responsabilidades podem ser modificados em diversos momentos da existncia das suas
aplicaes, faz sentido dividi-los em classes distintas.
Programao Java SE 7 6 - 18
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Depois do Padro DAO
O padro DAO move a lgica de persistncia das classes de
domnio para classes separadas.
Depois da refatorao para o padro DAO
Implementaes DAO
Se voc acha que poder precisar alterar a sua implementao DAO posteriormente para usar
outro mecanismo de persistncia, melhor usar uma interface para definir o contrato que todas
as implementaes DAO precisam cumprir.
As suas interfaces DAO descrevem mtodos para criar, ler, atualizar e deletar dados, embora os
nomes dos mtodos possam variar. Quando voc implementar o padro DAO pela primeira vez,
no ver o benefcio imediatamente. A vantagem aparece posteriormente, quando voc comea a
modificar ou substituir cdigo. Na lio Construindo Aplicaes de Banco de dados com JDBC,
abordamos a substituio do DAO baseado em memria com DAOs habilitados para arquivo e
para banco de dados.
Programao Java SE 7 6 - 19
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
A Necessidade do Padro Factory
O padro DAO depende do uso de interfaces para definir uma
abstrao. O uso de um construtor da implementao DAO
vincula voc a uma implementao especfica.
EmployeeDAO dao = new EmployeeDAOMemoryImpl();
Essa chamada de construtor
vinculada a uma implementao
e aparecer em vrios lugares
em toda a aplicao.
Com o uso de um tipo
de interface, as linhas
subsequentes no so
vinculadas a uma nica
implementao.
Programao Java SE 7 6 - 20
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Usando o Padro Factory
O uso de um mtodo factory impede que a sua aplicao seja
dependente de uma implementao DAO especfica.
EmployeeDAOFactory factory = new EmployeeDAOFactory();
EmployeeDAO dao = factory.createEmployeeDAO();
A implementao
EmployeeDAO ocultada.
Esse padro elimina chamadas diretas de construtor, em favor da chamada de um mtodo. Em
geral, um mtodo factory utilizado na implementao do padro DAO.
No exemplo do slide, voc no tem ideia do tipo de mecanismo de persistncia utilizado por
EmployeeDAO, pois apenas uma interface. O mtodo factory poderia retornar uma
implementao DAO que usa arquivos ou um banco de dados para armazenar e recuperar dados.
Como desenvolvedor, voc deseja saber o tipo de persistncia que est sendo utilizado, pois ele
influencia o desempenho e a confiabilidade da sua aplicao. Mas no deseja que a maior parte
do cdigo que escreve seja dependente do tipo de persistncia.
Programao Java SE 7 6 - 21
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
O Mtodo Factory
A implementao do mtodo factory o nico ponto da
aplicao que deve depender de classes DAO concretas.
public class EmployeeDAOFactory {
public EmployeeDAO createEmployeeDAO() {
return new EmployeeDAOMemoryImpl();
}
}
Retorna uma referncia de
tipo de interface
Por questo de simplicidade, esse mtodo factory define por hard-code o nome de uma classe
concreta a ser instanciada. Voc poderia aprimorar esse mtodo factory inserindo o nome da
classe em uma fonte externa, como um arquivo de texto, e usar a classe java.lang.Class
para instanciar a subclasse concreta. Um exemplo bsico do uso da classe java.lang.Class
o seguinte:
String name = "com.example.dao.EmployeeDAOMemoryImpl";
Class clazz = Class.forName(name);
EmployeDAO dao = (EmployeeDAO)clazz.newInstance();
Programao Java SE 7 6 - 22
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
DAO e Factory Juntos
Clientes que dependem apenas de DAOs abstratos
Programao Java SE 7 6 - 23
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Quiz
Uma implementao singleton tpica contm um mtodo
factory.
a. Verdadeiro
b. Falso
Programao Java SE 7 6 - 24
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Reutilizao de Cdigo
A duplicao de cdigo (cpia e colagem) pode causar
problemas de manuteno. Voc no deseja corrigir o mesmo
erro vrias vezes.
Princpio DRY (Dont repeat yourself!, No se repita)
Reutilize cdigo da forma adequada:
Refatore em bibliotecas as rotinas comumente utilizadas.
Mova para a classe me o comportamento compartilhado
por classes irms.
Crie novas combinaes de comportamentos combinando
vrios tipos de objetos (composio).
O processo de cpia e colagem de cdigo no algo que se deva evitar sempre. Se o cdigo
duplicado funcionar como ponto de partida e sofrer muitas modificaes, essa poder ser uma
situao aceitvel para copiar e colar linhas de cdigo. importante estar ciente do volume de
cpia e colagem que est ocorrendo em um projeto. Alm de realizar auditorias manuais de
cdigo, h ferramentas que voc pode usar para detectar cdigo duplicado. Para obter um
exemplo disso, consulte http://pmd.sourceforge.net/cpd.html.
Programao Java SE 7 6 - 25
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Dificuldades de Design
A herana de classe permite a reutilizao de cdigo, mas no
muito modular.
Como possvel criar SpyCarWithSunRoof?
Implementaes de mtodo localizadas entre diversas classes
Limitaes com Herana
O Java oferece suporte somente herana nica de classe, o que elimina a possibilidade de
herdar diversas implementaes de um mtodo com a mesma assinatura. A herana mltipla de
interface no representa o mesmo problema que a herana de classe, pois no podem existir
implementaes de mtodo conflitantes em interfaces.
Programao Java SE 7 6 - 26
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Composio
A composio de objetos permite criar objetos mais
complexos. Para implementar a composio, voc:
1. Cria uma classe com referncia a outras classes.
2. Adiciona mtodos com a mesma assinatura que so
encaminhados aos objetos referenciados.
Combinando mtodos de vrias classes
por meio de composio
e encaminhamento
composio
Delegao
Delegao e encaminhamento de mtodo so termos que costumam ser utilizados de forma
intercambivel. O encaminhamento de mtodo ocorre quando voc escreve um mtodo que
somente transfere a execuo para outro mtodo. Em alguns casos, a delegao pode implicar
mais do que um simples encaminhamento. Para saber mais sobre a diferena entre os dois
termos, consulte a pgina 20 do livro Design Patterns: Elements of Reusable Object-Oriented
Software.
Programao Java SE 7 6 - 27
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Os Assistentes IDE Facilitam a Implementao da Composio
Para implementar a composio com o NetBeans IDE, use a ferramenta Insert Code da seguinte
maneira:
1. Clique com o boto direito entre as chaves da classe complexa e escolha "Insert Code".
2. Selecione "Delegate Method.
Ser exibida a caixa de dilogo Generate Delegate Methods.
3. Selecione as chamadas de mtodo que voc deseja encaminhar.
Os mtodos so inseridos para voc.
Repita essas etapas para cada classe delegada.
Programao Java SE 7 6 - 28
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Implementao da Composio
public class SpyCarWithSunRoof {
private BasicCar car = new BasicCar();
private SpyCarAddon spyAddon = new SpyCarAddon();
private SunRoofAddon roofAddon = new SunRoofAddon();
public void start() {
car.start();
}
// other forwarded methods
}
Encaminhamento
de mtodo
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Polimorfismo e Composio
O polimorfismo deve nos permitir especificar qualquer tipo
de Car para o mtodo addCar. A composio no permite
polimorfismo, a menos que
Um objeto car complexo que no pode ser
especificado para um mtodo esperando um
objeto car simples
Reutilizao de Cdigo
A capacidade de usar o mtodo addCar para qualquer tipo de Car, por mais complexo que seja,
outra forma de reutilizao de cdigo. No momento, no podemos dizer o seguinte:
addCar(new SpyCarWithSunRoof());
Programao Java SE 7 6 - 29
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Polimorfismo e Composio
Use interfaces para que todas as classes delegadas ofeream
suporte ao polimorfismo.
Composio com interfaces para
oferecer suporte ao polimorfismo
Cada classe delegada que voc usa em uma composio deve ter uma interface definida. Ao
criar a classe de composio, voc declara que ela implementa todos os tipos de interface
delegados.
Com isso, voc cria um objeto que uma composio de outros objetos e tem vrios tipos.
Agora, podemos dizer:
addCar(new SpyCarWithSunRoof());
Programao Java SE 7 6 - 30
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Quiz
A delegao de mtodo necessria para criar objetos
complexos usando:
a. Polimorfismo
b. Composio
Programao Java SE 7 6 - 31
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Resumo
Nesta lio, voc aprendeu a:
Modelar problemas de negcios usando interfaces
Definir uma interface Java
Escolher entre herana de interface e de classe
Estender uma interface
Refatorar o cdigo para implementar o padro DAO
Programao Java SE 7 6 - 32
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Exerccio 6-1 Viso Geral:
Implementando uma Interface
Este exerccio abrange os seguintes tpicos:
Escrevendo uma interface
Implementando uma Interface
Criando referncias de um tipo de interface
Fazendo a converso em tipos de interface
Programao Java SE 7 6 - 33
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Exerccio 6-2 Viso Geral:
Aplicando o Padro DAO
Este exerccio abrange os seguintes tpicos:
Reescrevendo um objeto de domnio existente com uma
implementao de persistncia baseada em memria
usando o padro DAO
Aproveitando um mtodo factory abstrato para evitar a
dependncia de implementaes concretas
Programao Java SE 7 6 - 34
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Exerccio 6-3 (Opcional) Viso Geral:
Implementando a Composio
Este exerccio abrange os seguintes tpicos:
Reescrevendo uma aplicao existente para oferecer
melhor suporte reutilizao de cdigo por meio de
composio
Usando interfaces para permitir o polimorfismo
Programao Java SE 7 6 - 35
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Genricos e Colees
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Objetivos
Aps concluir esta lio, voc ser capaz de:
Criar uma classe genrica personalizada
Usar a inferncia de tipos com o operador diamante para
criar um objeto
Criar uma coleo sem usar genricos
Criar uma coleo usando genricos
Implementar uma ArrayList
Implementar um Set
Implementar um HashMap
Implementar uma pilha usando um deque
Usar tipos enumerados
Programao Java SE 7 7 - 2
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Genricos
Fornecer segurana de tipo flexvel ao cdigo
Mover vrios erros comuns do runtime para o tempo
de compilao
Fornecer um cdigo mais limpo e fcil de gravar
Reduzir a necessidade de transmisso com colees
So usados intensamente na Java Collections API
Programao Java SE 7 7 - 3
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Os dois exemplos no slide mostram classes de cache muito simples. Mesmo que cada classe
seja muito simples, uma classe separada necessria para qualquer tipo de objeto.
Programao Java SE 7 7 - 4
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Classe de Cache Simples sem Genricos
public class CacheString {
private String message = "";
public void add(String message){
this.message = message;
}
public String get(){
return this.message;
}
}
public class CacheShirt {
private Shirt shirt;
public void add(Shirt shirt){
this.shirt = shirt;
}
public Shirt get(){
return this.shirt;
}
}
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Classe de Cache Genrica
1 public class CacheAny <T>{
2
3 private T t;
4
5 public void add(T t){
6 this.t = t;
7 }
8
9 public T get(){
10 return this.t;
11 }
12 }
Para criar uma verso genrica da classe CacheAny, uma varivel chamada T adicionada
definio de classe entre parnteses angulares. Nesse caso, o T significa type e pode
representar qualquer tipo. Como mostra o exemplo, o cdigo foi alterado para usar t, em vez de
informaes de tipo especficas. Essa alterao permite que a classe CacheAny armazene
qualquer tipo de objeto.
O T foi escolhido por conveno, e no aleatoriamente. Diversas letras so geralmente usadas
com os genricos.
Observao: possvel usar qualquer identificador que voc desejar. Os valores a seguir so
meras sugestes.
Estas so as convenes:
T: Type (Tipo)
E: Element (Elemento)
K: Key (Chave)
V: Value (Valor)
S, U: Letras usadas se houver tipos secundrios, tercirios ou mais
Programao Java SE 7 7 - 5
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Genricos em Ao
Compare os objetos restritos a tipo com suas alternativas
genricas.
1 public static void main(String args[]){
2 CacheString myMessage = new CacheString(); // Type
3 CacheShirt myShirt = new CacheShirt(); // Type
4
5 //Generics
6 CacheAny<String> myGenericMessage = new CacheAny<String>();
7 CacheAny<Shirt> myGenericShirt = new CacheAny<Shirt>();
8
9 myMessage.add("Save this for me"); // Type
10 myGenericMessage.add("Save this for me"); // Generic
11
12 }
Observe como a verso genrica da classe pode substituir qualquer quantidade de classes de
cache especficas de tipo. As funes add() e get() funcionam exatamente da mesma
maneira. De fato, se a declarao myMessage for alterada para genrica, nenhuma alterao
precisar ser feita no cdigo restante.
O cdigo de exemplo pode ser encontrado no projeto Generics do arquivo
TestCacheAny.java.
Programao Java SE 7 7 - 6
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Genricos com Inferncia de Tipos
(Operador Diamante)
Sintaxe
No necessrio repetir os tipos direita da instruo.
Os colchetes angulares indicam que os parmetros de tipo
esto espelhados.
Simplifica declaraes genricas
Salva a digitao
//Generics
CacheAny<String> myMessage = new CacheAny<>();
}
A inferncia de tipos com o operador diamante um novo recurso do JDK 7. No cdigo genrico,
observe como a
definio de tipo direita sempre equivalente definio de tipo esquerda. No JDK 7,
possvel usar o operador diamante para indicar que a definio de tipo direita equivalente da
esquerda. Isso ajuda a evitar a digitao de informaes redundantes repetidas vezes.
Exemplo: TestCacheAnyDiamond.java
Observao: De certa forma, ele a forma oposta de uma designao de tipo Java normal. Por
exemplo,
Employee emp = new Manager(); torna emp o objeto de uma instncia de Manager.
Mas, no caso dos genricos:
ArrayList<Manager> managementTeam = new ArrayList<>();
o lado esquerdo da expresso (e no o lado direito) que determina o tipo.
Programao Java SE 7 7 - 7
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Quiz
Qual das alternativas a seguir no uma abreviao
convencional para uso com genricos?
a. T: Table (Tabela)
b. E: Element (Elemento)
c. K: Key (Chave)
d. V: Value (Valor)
Programao Java SE 7 7 - 8
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Colees
Uma coleo um objeto projetado para gerenciar um
grupo de objetos.
Os objetos de uma coleo so denominados elementos
.Primitivas no so permitidas em uma coleo.
Vrios tipos de coleo implementam vrias estruturas
de dados comuns:
Pilha, filha, array dinmico, hash
A Collections API baseia-se
principalmente nos genricos para
sua implementao.
Uma coleo um objeto que gerencia um grupo de objetos. Os objetos da coleo so
denominados elementos. Vrios tipos de coleo implementam estruturas de dados padro,
incluindo pilhas, filas, arrays dinmicos e hashes. Todos os objetos de coleo foram otimizados
para serem usados em aplicaes Java.
Observao: As classes Collections so armazenadas no pacote java.util. As instrues
import no so mostradas nos exemplos a seguir, mas as instrues import so necessrias
em cada tipo de coleo:
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
Programao Java SE 7 7 - 9
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Tipos de Coleo
O diagrama no slide mostra todos os tipos de coleo abaixo de Collection. Alguns mtodos
de amostra so fornecidos para Collection e List. Observe o uso dos genricos.
Caractersticas das Classes de Implementao
HashSet: Uma coleo de elementos que no contm elementos duplicados
TreeSet: Uma coleo classificado de elementos que no contm elementos duplicados
ArrayList: Uma implementao de array dinmico
Deque: Uma coleo que pode ser usada para implementar uma pilha ou fila
Observao: A interface Map uma rvore de herana separada, que ser abordada
posteriormente na lio.
Programao Java SE 7 7 - 10
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Interface List
List uma interface que define o comportamento da lista
genrica.
Uma coleo ordenada de elementos
Os comportamentos de List incluem:
Adio de elementos em um ndice especfico
Adio de elementos ao fim da lista
Obteno de um elemento com base em um ndice
Remoo de um elemento com base em um ndice
Substituio de um elemento com base em um ndice
Obteno do tamanho da lista
Use List como um objeto de instncia para ocultar os
detalhes da implementao.
A interface List a base de todas as classes Collections que exibem o comportamento da lista.
Programao Java SE 7 7 - 11
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Classe de Implementao ArrayList
um array que cresce dinamicamente
A lista crescer automaticamente se os elementos
excederem o tamanho inicial.
Tem um ndice numrico
Os elementos so acessados pelo ndice.
Os elementos podem ser inseridos com base no ndice.
Os elementos podem ser substitudos.
Permite itens duplicados
Uma ArrayList implementa uma coleo List. A implementao exibe caractersticas de um
array que cresce dinamicamente. Uma aplicao de lista de tarefas um bom exemplo de
aplicao que pode se beneficiar com uma ArrayList.
Programao Java SE 7 7 - 12
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
ArrayList Sem Genricos
1 public class OldStyleArrayList {
2 public static void main(String args[]){
3 List partList = new ArrayList(3);
4
5 partList.add(new Integer(1111));
6 partList.add(new Integer(2222));
7 partList.add(new Integer(3333));
8 partList.add("Oops a string!");
9
10 Iterator elements = partList.iterator();
11 while (elements.hasNext()) {
12 Integer partNumberObject = (Integer) (elements.next()); // error?
13 int partNumber = (int) partNumberObject.intValue();
14
15 System.out.println("Part number: " + partNumber);
16 }
17 }
18 }
No exemplo do slide, uma lista de nmeros de pea criada por meio de uma ArrayList. A
sintaxe anterior ao Java 1.5 no usa nenhum tipo de definio. Portanto, nenhum tipo pode ser
adicionado lista, conforme mostrado na linha 8. responsabilidade do programador saber quais
objetos constam na lista e em que ordem. Se for feita uma suposio de que a lista destina-se
somente a objetos Integer, um erro de runtime ocorrer na linha 12.
Nas linhas 10 a 16, com uma coleo no genrica, um Iterator usado para fazer a iterao
na lista de itens. Observe que necessrio fazer vrias converses para que os objetos sejam
retirados novamente da lista e voc possa imprimir os dados.
No final, haver uma grande quantidade de acar sinttico (cdigo extra) desnecessrio
trabalhando com as colees dessa maneira.
Se a linha que adiciona a String ArrayList for comentada, o programa gerar a seguinte
sada:
Part number: 1111
Part number: 2222
Part number: 3333
Programao Java SE 7 7 - 13
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
ArrayList Genrica
1 import java.util.ArrayList;
2 import java.util.List;
3
4 public class GenericArrayList {
5 public static void main(String args[]){
6
7 List<Integer> partList = new ArrayList<>(3);
8
9 partList.add(new Integer(1111));
10 partList.add(new Integer(2222));
11 partList.add(new Integer(3333));
12 partList.add(new Integer(4444)); // ArrayList auto grows
13
14 System.out.println("First Part: " + partList.get(0)); // First item
15 partList.add(0, new Integer(5555)); // Insert an item by index
16
17 // partList.add("Bad Data"); // compile error now
Com os genricos, tudo muito mais simples. Quando a ArrayList for inicializada na linha 6,
qualquer tentativa de adicionar um valor invlido (linha 15) resultar em um erro de tempo de
compilao.
O exemplo do slide mostra diversos recursos de ArrayList.
A linha 12 demonstra como uma ArrayList cresce automaticamente quando um item fica
maior que seu tamanho original.
A linha 14 mostra como os elementos podem ser acessados pelo seu ndice.
A linha 15 mostra como os elementos podem ser inseridos na lista com base em seu ndice.
Observao: Na linha 7, a ArrayList atribuda a um tipo de List. O uso desse estilo permite
que voc remova a implementao de List sem alterar outro cdigo.
Programao Java SE 7 7 - 14
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
ArrayList Genrica: Iterao e Boxing
O loop for aprimorado, ou loop for-each, fornece um
cdigo mais limpo.
Nenhuma converso feita devido aos recursos
autoboxing e unboxing.
for (Integer partNumberObj:partList){
int partNumber = partNumberObj; // Demos auto unboxing
System.out.println("Part number: " + partNumber);
}
O uso do loop for-each muito mais fcil e fornece um cdigo mais limpo. Nenhuma converso
ser feita devido ao recurso autounboxing do Java.
Programao Java SE 7 7 - 15
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Autoboxing e Unboxing
Simplifica a sintaxe
Gera um cdigo mais limpo e fcil de ler
1 public class AutoBox {
2 public static void main(String[] args){
3 Integer intObject = new Integer(1);
4 int intPrimitive = 2;
5
6 Integer tempInteger;
7 int tempPrimitive;
8
9 tempInteger = new Integer(intPrimitive);
10 tempPrimitive = (int) intObject.intValue();
11
12 tempInteger = intPrimitive; // Auto box
13 tempPrimitive = intObject; // Auto unbox
As linhas 9 e 10 mostram um mtodo tradicional de movimentao entre objetos e primitivas. As
linhas 12 e 13 mostram os recursos boxing e unboxing.
Autoboxing e Unboxing
Os recursos autoboxing e unboxing so recursos de linguagem Java que permitem fazer
atribuies sensveis sem sintaxe de converso formal. A Java fornece as converses no tempo
de compilao.
Observao: Tenha cuidado ao usar o recurso autoboxing em um loop. Existe um custo de
desempenho pelo uso desse recurso.
Programao Java SE 7 7 - 16
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Quiz
Qual das alternativas a seguir declara um Integer
ArrayList com trs elementos?
a. List<Integer> partList = new ArrayList<>(three);
b. List<Integer> partList = new ArrayList<>[3];
c. List<Integer> partList = new ArrayList<>(three);
d. List<Integer> partList = new ArrayList<>(3);
Programao Java SE 7 7 - 17
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Interface Set
Um conjunto uma lista que contm somente elementos
exclusivos.
Um conjunto no tem ndice.
Elementos duplicados no so permitidos em um conjunto.
possvel fazer a iterao nos elementos para acess-los.
TreeSet fornece implementao classificada.
Como exemplo, um conjunto pode ser usado para rastrear uma lista de nmeros de pea
exclusivos.
Programao Java SE 7 7 - 18
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Interface Set: Exemplo
Um conjunto uma coleo de elementos exclusivos.
1 public class SetExample {
2 public static void main(String[] args){
3 Set<String> set = new TreeSet<>();
4
5 set.add("one");
6 set.add("two");
7 set.add("three");
8 set.add("three"); // not added, only unique
9
10 for (String item:set){
11 System.out.println("Item: " + item);
12 }
13 }
14 }
Um conjunto uma coleo de elementos exclusivos. Este exemplo usa um TreeSet,
que classifica os itens no conjunto. Se o programa for executado, a sada ser a seguinte:
Item: one
Item: three
Item: two
Programao Java SE 7 7 - 19
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Interface Map
Uma coleo que armazena vrios pares de chave/valor
Chave: Identificador exclusivo para cada elemento em uma
coleo
Valor: Um valor armazenado no elemento associado chave
Denominado arrays associativos em outras linguagens
Chave Valor
101 Blue Shirt
102 Black Shirt
103 Gray Shirt
Um Map recomendvel para rastrear itens como listas de peas e suas descries (conforme
mostrado no slide).
Programao Java SE 7 7 - 20
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Tipos Map
A interface Map no estende a interface Collection porque representa mapeamentos, e no
uma coleo de objetos. Estas so algumas classes de implementao de chave:
TreeMap: Um mapa no qual as chaves so classificadas automaticamente
HashTable: Uma implementao clssica de array associativo com chaves e valores.
HashTable sincronizada.
HashMap: Uma implementao semelhante HashTable; a nica diferena que ela
aceita chaves e valores nulos. Alm disso, ela no sincronizada.
Programao Java SE 7 7 - 21
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Interface Map: Exemplo
1 public class MapExample {
2 public static void main(String[] args){
3 Map <String, String> partList = new TreeMap<>();
4 partList.put(S001", "Blue Polo Shirt");
5 partList.put(S002", "Black Polo Shirt");
6 partList.put(H001", "Duke Hat");
7
8 partList.put(S002", "Black T-Shirt"); // Overwrite value
9 Set<String> keys = partList.keySet();
10
11 System.out.println("=== Part List ===");
12 for (String key:keys){
13 System.out.println("Part#: " + key + " " +
partList.get(key));
14 }
15 }
16 }
O exemplo mostra como criar um Map e executar operaes padro nele. A sada gerada pelo
programa :
=== Part List ===
Part#: 111111 Blue Polo Shirt
Part#: 222222 Black T-Shirt
Part#: 333333 Duke Hat
Programao Java SE 7 7 - 22
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Interface Deque
Uma coleo que pode ser usada como uma pilha ou uma fila
Significa double-ended queue (e se pronuncia deck)
Um fila permite operaes FIFO (primeiro a entrar,
primeiro a sair)
Mtodos add(e) e remove()
Uma pilha permite operaes LIFO (ltimo a entrar,
primeiro a sair)
Mtodos push(e) e pop()
Deque uma interface filho de Collection (exatamente como Set e List).
Uma fila geralmente usada para rastrear solicitaes de mensagens assncronas; portanto, elas
podem ser processadas na ordem. Uma pilha pode ser muito til para atravessar uma rvore de
diretrios ou estruturas similares.
Programao Java SE 7 7 - 23
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Pilha com Deque: Exemplo
1 public class TestStack {
2 public static void main(String[] args){
3 Deque<String> stack = new ArrayDeque<>();
4 stack.push("one");
5 stack.push("two");
6 stack.push("three");
7
8 int size = stack.size() - 1;
9 while (size >= 0 ) {
10 System.out.println(stack.pop());
11 size--;
12 }
13 }
14 }
Um deque (se pronuncia deck) uma doubled-ended queue. Basicamente, isso significa que
um deque pode ser usado como fila (operaes primeiro a entrar, primeiro a sair [FIFO]) ou como
pilha (operaes ltimo a entrar,
primeiro a sair [LIFO]).
Programao Java SE 7 7 - 24
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Ordenando Colees
As interfaces Comparable e Comparator so usadas
para classificar colees.
Ambas so implementadas usando genricos.
Com a interface Comparable:
Substitui o mtodo compareTo
Fornece somente uma opo de classificao
Com a interface Comparator:
implementada por meio do mtodo compare
Permite criar vrias classes Comparator
Permite criar e usar diversas opes de classificao
A Collections API fornece duas interfaces para ordenao de elementos: Comparable e
Comparator.
A interface Comparable implementada em uma classe e fornece uma nica opo de
classificao para a classe.
A interface Comparator permite criar vrias opes de classificao. Voc conecta a opo
designada quando desejar.
As duas interfaces podem ser usadas com colees classificadas, como TreeSet e TreeMap.
Programao Java SE 7 7 - 25
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
O slide mostra como a classe ComparableStudent se relacionada com a interface
Comparable e o TreeSet.
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Interface Comparable
Com a interface Comparable:
Substitui o mtodo compareTo
Fornece somente uma opo de classificao
Programao Java SE 7 7 - 26
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Comparable: Exemplo
1 public class ComparableStudent implements Comparable<ComparableStudent>{
2 private String name; private long id = 0; private double gpa = 0.0;
3
4 public ComparableStudent(String name, long id, double gpa){
5 // Additional code here
6 }
7 public String getName(){ return this.name; }
8 // Additional code here
9
10 public int compareTo(ComparableStudent s){
11 int result = this.name.compareTo(s.getName());
12 if (result > 0) { return 1; }
13 else if (result < 0){ return -1; }
14 else { return 0; }
15 }
16 }
Esse exemplo do slide implementa a interface Comparable e seu mtodo compareTo. Observe
que, como a interface projetada usando genricos, os parnteses angulares definem o tipo de
classe que passado para o mtodo compareTo. As instrues if so includas para
demonstrar as comparaes efetuadas. Voc tambm pode retornar meramente um resultado.
Os nmeros retornados tm o seguinte significado.
Nmero negativo: s vem antes do elemento atual.
Nmero positivo: s vem depois do elemento atual.
Zero: s igual ao elemento atual.
Em casos nos quais a coleo contm valores equivalentes, substitua o cdigo que retorna zero
pelo cdigo adicional que retorna um nmero negativo ou positivo.
Programao Java SE 7 7 - 27
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Teste de Comparable: Exemplo
1 public class TestComparable {
2 public static void main(String[] args){
3 Set<ComparableStudent> studentList = new TreeSet<>();
4
5 studentList.add(new ComparableStudent("Thomas Jefferson", 1111,
3.8));
6 studentList.add(new ComparableStudent("John Adams", 2222, 3.9));
7 studentList.add(new ComparableStudent("George Washington", 3333,
3.4));
8
9 for(ComparableStudent student:studentList){
10 System.out.println(student);
11 }
12 }
13 }
No exemplo do slide, uma ArrayList de elementos ComparableStudent criada. Depois que
a lista inicializada, ela classificada por meio da interface Comparable. A sada do programa
a seguinte:
Name: George Washington ID: 3333 GPA:3.4
Name: John Adams ID: 2222 GPA:3,9
Name: Thomas Jefferson ID: 1111 GPA:3,8
Observao: A classe ComparableStudent substituiu o mtodo toString().
Programao Java SE 7 7 - 28
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Interface Comparator
Com a interface Comparator:
implementada por meio do mtodo compare
Permite criar vrias classes Comparator
Permite criar e usar diversas opes de classificao
O slide mostra duas classes Comparator que podem ser usadas com a classe Student. O
exemplo do prximo slide mostra como usar Comparator com uma interface no classificada
como ArrayList usando a classe de utilitrio Collections.
Programao Java SE 7 7 - 29
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Comparator: Exemplo
public class StudentSortName implements Comparator<Student>{
public int compare(Student s1, Student s2){
int result = s1.getName().compareTo(s2.getName());
if (result != 0) { return result; }
else {
return 0; // Or do more comparing
}
}
}
public class StudentSortGpa implements Comparator<Student>{
public int compare(Student s1, Student s2){
if (s1.getGpa() < s2.getGpa()) { return 1; }
else if (s1.getGpa() > s2.getGpa()) { return -1; }
else { return 0; }
}
}
O exemplo no slide mostra as classes Comparator que so criadas para realizar a classificao
com base em Nome e GPA. Para a comparao de nomes, as instrues if foram simplificadas.
Programao Java SE 7 7 - 30
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Teste de Comparator: Exemplo
1 public class TestComparator {
2 public static void main(String[] args){
3 List<Student> studentList = new ArrayList<>(3);
4 Comparator<Student> sortName = new StudentSortName();
5 Comparator<Student> sortGpa = new StudentSortGpa();
6
7 // Initialize list here
8
9 Collections.sort(studentList, sortName);
10 for(Student student:studentList){
11 System.out.println(student);
12 }
13
14 Collections.sort(studentList, sortGpa);
15 for(Student student:studentList){
16 System.out.println(student);
17 }
18 }
19 }
O exemplo do slide mostra como os dois objetos Comparator so usados com uma coleo.
Observao: Uma parte do cdigo foi comentada para economizar espao.
Observe como os objetos Comparator so inicializados nas linhas 4 e 5. Depois que as
variveis sortName e sortGpa so criadas, elas podem ser passadas para o mtodo sort()
por nome. A execuo do programa produz a seguinte sada.
Name: George Washington ID: 3333 GPA:3.4
Name: John Adams ID: 2222 GPA:3,9
Name: Thomas Jefferson ID: 1111 GPA:3,8
Name: John Adams ID: 2222 GPA:3,9
Name: Thomas Jefferson ID: 1111 GPA:3,8
Name: George Washington ID: 3333 GPA:3.4
Notas
A classe de utilitrio Collections fornece um diversos mtodos teis para vrias
colees. Os mtodos incluem min(), max(), copy() e sort().
A classe Student substituiu o mtodo toString().
Programao Java SE 7 7 - 31
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Quiz
Qual interface deve ser usada para criar vrias opes de
classificao para uma coleo?
a. Comparable
b. Comparison
c. Comparator
d. Comparinator
Programao Java SE 7 7 - 32
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Resumo
Nesta lio, voc aprendeu a:
Criar uma classe genrica personalizada
Usar a inferncia de tipos com o operador diamante para
criar um objeto
Criar uma coleo sem usar genricos
Criar uma coleo usando genricos
Implementar uma ArrayList
Implementar um Set
Implementar um HashMap
Implementar uma pilha usando um deque
Usar tipos enumerados
Programao Java SE 7 7 - 33
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Exerccio 7-1 - Viso Geral:
Contando Nmeros de Pea por Meio de um HashMap
Este exerccio aborda os seguintes tpicos:
Criao de um mapa para armazenar um nmero de pea
e uma contagem
Criao de um mapa para armazenar um nmero de pea
e uma descrio
Processamento da lista de peas e produo de um
relatrio
Programao Java SE 7 7 - 34
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Exerccio 7-2 - Viso Geral:
Fazendo a Correspondncia de Parnteses
Usando um Deque
Este exerccio aborda o processamento de instrues de
programao para garantir que o nmero de parnteses seja
correspondente.
Programao Java SE 7 7 - 35
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Exerccio 7-3 - Viso Geral:
Contando Estoque e Classificando com Comparators
Este exerccio aborda o processamento de transaes de
estoque que geram dois relatrios classificados de forma
diferente por meio de Comparators.
Programao Java SE 7 7 - 36
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Processamento de String
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Objetivos
Aps concluir esta lio, voc ser capaz de:
Ler dados na linha de comando
Pesquisar strings
Analisar strings
Criar strings usando um StringBuilder
Pesquisar strings usando expresses regulares
Analisar strings usando expresses regulares
Substituir strings usando expresses regulares
Programao Java SE 7 8 - 2
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Argumentos de Linha de Comando
Qualquer aplicao de tecnologia Java pode usar
argumentos de linha-de comando.
Esses argumentos de string so colocados na linha de
comando para iniciar o interpretador Java depois do nome
da classe:
java TestArgs arg1 arg2 "another arg"
Cada argumento de linha de comando colocado na
matriz args que passada para o mtodo main esttico:
public static void main(String[] args)
Quando um programa Java iniciado em uma janela de terminal, voc pode fornecer ao
programa zero ou mais argumentos de linha de comando.
Esses argumentos de linha de comando permitem que o usurio especifique as informaes de
configurao da aplicao. Esses argumentos so strings: tokens standalone (como arg1) ou
strings entre aspas (como "another arg").
Programao Java SE 7 8 - 3
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Argumentos de Linha de Comando
public class TestArgs {
public static void main(String[] args){
for ( int i = 0; i < args.length; i++ ) {
System.out.println("args[" + i + "] is '" +
args[i] + "'");
}
}
}
Exemplo de execuo:
java TestArgs "Ted Baxter" 45 100.25
args[0] is 'Ted Baxter'
args[1] is '45'
args[2] is '100,25'
Os argumentos de linha de comando sempre so passados para o mtodo main como strings,
independentemente do tipo pretendido. Se uma aplicao exigir argumentos de linha de comando
que no sejam do tipo String, por exemplo, valores numricos, a aplicao dever converter os
argumentos de string em seus respectivos tipos usando as classes de ajustadores, como o
mtodo Integer.parseInt, que pode ser usado para converter o argumento de string que
representa o inteiro numrico em tipo int.
Programao Java SE 7 8 - 4
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Propriedades
A classe java.util.Properties usada para
carregar e salvar pares de chave/valor em Java.
Podem ser armazenadas em um arquivo de texto simples:
hostName = www.example.com
userName = user
password = pass
O nome do arquivo termina em .properties.
O arquivo pode estar em qualquer lugar que
o compilador o encontrar.
O benefcio de um arquivo de propriedades a capacidade de definir valores para aplicao
externamente. O arquivo de propriedades geralmente lido na inicializao da aplicao e usado
em valores padro. Mas o arquivo de propriedades tambm pode ser parte integrante de um
esquema de localizao, no qual voc armazena os valores dos labels de menu e texto para
vrios idiomas que a aplicao talvez suporte.
A conveno para um arquivo de propriedades <nomedoarquivo>.properties, mas o
arquivo pode ter a extenso que voc desejar. O arquivo pode estar em qualquer lugar; a
aplicao conseguir encontr-lo.
Programao Java SE 7 8 - 5
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Carregando e Usando um Arquivo de Propriedades
1 public static void main (String[] args) {
2 Properties myProps = new Properties();
3 try {
4 FileInputStream fis = new FileInputStream("ServerInfo.properties");
5 myProps.load(fis);
6 } catch (IOException e) {
7 System.out.println("Error: " + e.getMessage());
8 }
9
10 // Print Values
11 System.out.println("Server: " + myProps.getProperty("hostName"));
12 System.out.println("User: " + myProps.getProperty("userName"));
13 System.out.println("Password: " + myProps.getProperty("password"));
14 }
No fragmento de cdigo, voc cria um objeto Properties. Em seguida, usando uma instruo
try, voc abre um arquivo referente aos arquivos de origem do projeto NetBeans. Quando ele
carregado, os pares de nome/valor so disponibilizados para uso na aplicao.
Os arquivos de propriedades permitem que voc injete facilmente configuraes ou outros dados
de aplicao na aplicao.
Programao Java SE 7 8 - 6
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Carregando Propriedades a Partir
da Linha de Comando
As informaes da propriedade tambm podem ser
passadas na linha de comando.
Use a opo D para passar os pares de chave/valor:
java Dpropertyname=value Dpropertyname=value myApp
Por exemplo, passe um dos valores anteriores:
java Dusername=user myApp
Obtenha dos dados de Properties no objeto System:
String userName = System.getProperty("username");
As informaes da propriedade tambm podem ser passadas na linha de comando. A vantagem
de passar propriedades na linha de comando a simplicidade. No necessrio abrir um arquivo
para l-lo. No entanto, se voc tiver poucos parmetros, prefervel usar um arquivo de
propriedades.
Programao Java SE 7 8 - 7
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
PrintWriter e a Console
Se voc est cansado de usar System.out.println() para
imprimir texto na console, h uma alternativa.
import java.io.PrintWriter;
public class PrintWriterExample {
public static void main(String[] args){
PrintWriter pw = new PrintWriter(System.out, true);
pw.println("This is some output.");
}
}
Se voc no deseja digitar System.out.whatever vrias vezes, use PrintWriter para
diminuir o esforo de digitao. O exemplo no slide mostra como criar o objeto. A opo true
necessria para forar PrintWriter a esvaziar cada linha impressa na console.
Programao Java SE 7 8 - 8
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Formato printf
A linguagem Java permite que as strings sejam formatadas
de vrias maneiras:
printf e String.format
public class PrintfExample {
public static void main(String[] args){
PrintWriter pw = new PrintWriter(System.out, true);
double price = 24.99; int quantity = 2; String color = "Blue";
System.out.printf("We have %03d %s Polo shirts that cost
$%3.2f.\n", quantity, color, price);
System.out.format("We have %03d %s Polo shirts that cost
$%3.2f.\n", quantity, color, price);
String out = String.format("We have %03d %s Polo shirts that cost
$%3.2f.", quantity, color, price);
System.out.println(out);
pw.printf("We have %03d %s Polo shirts that cost $%3.2f.\n",
quantity, color, price);
}
}
Execute o formato printf usando a classe String e qualquer fluxo de sada. O slide mostra
vrios exemplos diferentes de formatao de string. Consulte a documentao da Java API para
obter informaes detalhadas sobre todas as opes.
%s: String
%d: Decimal
%f: Flutuante
A sada do programa a seguinte:
We have 002 Blue Polo shirts that cost $24.99.
We have 002 Blue Polo shirts that cost $24.99.
We have 002 Blue Polo shirts that cost $24.99.
We have 002 Blue Polo shirts that cost $24.99.
Programao Java SE 7 8 - 9
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Quiz
Qual das duas alternativas a seguir so instrues de
impresso com formato vlido?
a. System.out.printf("%s Polo shirts cost
$%3.2f.\n", "Red", "35.00");
b. System.out.format("%s Polo shirts cost
$%3.2f.\n", "Red", "35.00");
c. System.out.println("Red Polo shirts cost
$35.00.\n");
d. System.out.print("Red Polo shirts cost
$35.00.\n");
Programao Java SE 7 8 - 10
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Processamento de String
StringBuilder para construo da string
Mtodos de string incorporados
Pesquisa
Anlise
Extrao de substring
Anlise com StringTokenizer
A primeira parte desta seo abrange funes de string que no so expresses regulares.
Quando voc executa manipulaes de string simples, h diversos mtodos incorporados muito
teis.
Programao Java SE 7 8 - 11
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
StringBuilder e StringBuffer
StringBuilder e StringBuffer so as ferramentas
preferenciais quando a concatenao de string no trivial.
Mais eficiente do que +
Simultaneidade
StringBuilder (thread no seguro)
StringBuffer (thread seguro)
Defina a capacidade para o tamanho necessrio.
O redimensionamento constante do buffer tambm pode
resultar em problemas de desempenho.
As classes StringBuilder e StringBuffer so o modo preferencial de concatenao de
strings.
Programao Java SE 7 8 - 12
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Programao Java SE 7 8 - 13
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
StringBuilder: Exemplo
public class StringBuilding {
public static void main(String[] args){
StringBuilder sb = new StringBuilder(500);
sb.append(", the lightning flashed and the thunder
rumbled.\n");
sb.insert(0, "It was a dark and stormy night");
sb.append("The lightning struck...\n").append("[ ");
for(int i = 1; i < 11; i++){
sb.append(i).append(" ");
}
sb.append("] times");
System.out.println(sb.toString());
}
}
O exemplo deste slide mostra alguns mtodos StringBuilder comuns. Use StringBuilder
para inserir texto na posio. O encadeamentos das chamadas de anexao prtica
recomendada para a construo de strings.
A sada do programa a seguinte:
It was a dark and stormy night, the lightning flashed and the thunder
rumbled.
The lightning struck...
[ 1 2 3 4 5 6 7 8 9 10 ] times
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Amostra de Mtodos de String
1 public class StringMethodsExample {
2 public static void main(String[] args){
3 PrintWriter pw = new PrintWriter(System.out, true);
4 String tc01 = "It was the best of times";
5 String tc02 = "It was the worst of times";
6
7 if (tc01.equals(tc02)){
8 pw.println("Strings match..."); }
9 if (tc01.contains("It was")){
10 pw.println("It was found"); }
11 String temp = tc02.replace("w", "zw");
12 pw.println(temp);
13 pw.println(tc02.substring(5, 12));
14 }
15 }
O cdigo no slide demonstra alguns mtodos de string mais teis da classe String.
equals(): Testa a igualdade do contedo de duas strings. Esse mtodo preferencial a
==, que testa se dois objetos apontam para a mesma referncia.
contains(): Pesquisa uma string para verificar se ela contm a string fornecida
replace(): Procura a string fornecida e substitui todas as instncia pela string de destino
fornecida. Existe um mtodo replaceFirst() para substituir somente a primeira
instncia.
substring(): Retorna uma string com base em sua posio na string
A execuo dos programas no slide retornar a seguinte sada:
It was found
It zwas the zworst of times
s the w
Programao Java SE 7 8 - 14
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Usando o Mtodo split()
1 public class StringSplit {
2 public static void main(String[] args){
3 String shirts = "Blue Shirt, Red Shirt, Black
Shirt, Maroon Shirt";
4
5 String[] results = shirts.split(", ");
6 for(String shirtStr:results){
7 System.out.println(shirtStr);
8 }
9 }
10 }
A maneira mais simples de analisar uma string por meio do mtodo split(). Chame o mtodo
com o caractere (ou os caracteres) que dividir a string. O resultado capturado em uma matriz.
Observao: O delimitador pode ser definido por meio de expresses regulares.
A sada do programa no slide a seguinte:
Blue Shirt
Red Shirt
Black Shirt
Maroon Shirt
Programao Java SE 7 8 - 15
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Analisando com StringTokenizer
1 public class StringTokenizerExample {
2 public static void main(String[] args){
3 String shirts = "Blue Shirt, Red Shirt, Black Shirt, Maroon
Shirt";
4
5 StringTokenizer st = new StringTokenizer(shirts, ", ");
6
7 while(st.hasMoreTokens()){
8 System.out.println(st.nextToken());
9 }
10 }
11 }
A classe StringTokenizer exerce a mesma funo de split() ,mas adota uma abordagem
diferente. Voc deve iterar os tokens para obter acesso a eles. Observe tambm que o
delimitador ", " , nesse caso, representa o uso de vrgulas e espaos como delimitadores.
Desse modo, o resultado da anlise o seguinte:
Blue
Shirt
Red
Shirt
Black
Shirt
Maroon
Shirt
Programao Java SE 7 8 - 16
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Scanner
A Scanner pode inserir tokens em uma string ou em um fluxo.
1 public static void main (String[] args) {
2 Scanner s = null;
3 StringBuilder sb = new StringBuilder(64);
4 String line01 = "1.1, 2.2, 3.3";
5 float fsum = 0.0f;
6
7 s = new Scanner(line01).useDelimiter(", ");
8 try {
9 while (s.hasNextFloat()) {
10 float f = s.nextFloat();
11 fsum += f;
12 sb.append(f).append(" ");
13 }
14 System.out.println("Values found: " + sb.toString());
15 System.out.println("FSum: " + fsum);
16 } catch (Exception e) {
17 System.out.println(e.getMessage());
18 }
A Scanner pode ser usada para inserir tokens em um fluxo de entrada ou uma string. Alm
disso, uma Scanner pode ser usada para inserir tokens em nmeros e convert-los em qualquer
tipo de nmero primitivo. Observe como a Scanner definida na linha 7. O objeto resultante
pode ser iterado com base em um tipo especfico. Nesse caso, um float usado.
A sada desse segmento de cdigo a seguinte:
Values found: 1.1 2.2 3.3
FSum: 6.6000004
Programao Java SE 7 8 - 17
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Expresses Regulares
Uma linguagem para fazer a correspondncia de strings
de texto
Vocabulrio muito detalhado
Pesquisar, extrair, ou pesquisar e substituir
Com a Java, a barra invertida (\) no nada agradvel.
Objetos Java
Pattern
Matcher
PatternSyntaxException
java.util.regex
Programao Java SE 7 8 - 18
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Pattern e Matcher
Pattern: Define uma expresso regular
Matcher: Especifica uma string a ser pesquisada
1 import java.util.regex.Matcher;
2 import java.util.regex.Pattern;
3
4 public class PatternExample {
5 public static void main(String[] args){
6 String t = "It was the best of times";
7
8 Pattern pattern = Pattern.compile("the");
9 Matcher matcher = pattern.matcher(t);
10
11 if (matcher.find()) { System.out.println("Found match!"); }
12 }
13 }
Os objetos Pattern e Matcher trabalham em conjunto para fornecer uma soluo completa.
O objeto Pattern define a expresso regular que ser usada na pesquisa. Como mostrado no
exemplo, uma expresso regular pode ser to simples quanto uma palavra ou frase.
O objeto Matcher usado para selecionar a string de destino a ser pesquisada. Diversos
mtodos esto disponveis para o objeto matcher. Eles sero abordados nos slides a seguir.
Quando executado, o exemplo produzir a seguinte sada:
Found match!
Programao Java SE 7 8 - 19
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Classes de Caractere
Caractere Descrio
. Corresponde a um nico caractere (letra, dgito ou caractere especial),
exceto os marcadores de fim de linha
[abc] Corresponde a qualquer a, b ou c nessa posio
[^abc] Corresponde a qualquer que no seja a, b ou c nessa posio
[a-c] Um intervalo de caracteres (nesse caso, a, b e c)
| Alternao; essencialmente um indicador ou
As classes de caractere permitem que voc faa a correspondncia de um caractere de diversas
formas.
Programao Java SE 7 8 - 20
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Classe de Caractere: Exemplos
String de
Destino
It was the best of times
Padro Descrio Correspondncia
de Texto
w.s
Qualquer sequncia que inicia
com w seguida por qualquer
caractere seguido por s.
It was the best of
times
w[abc]s
Qualquer sequncia que inicia
com w seguida por a, b ou
c e, depois, por s.
It was the best of
times
t[^aeo]mes
Qualquer sequncia que inicia
com t seguida por qualquer
caracteres que no seja a, e
ou o seguido por mes.
It was the best of
times
O cdigo desse exemplo pode ser encontrado no projeto StringExamples do arquivo
CustomCharClassExamples.java.
Programao Java SE 7 8 - 21
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Cdigo da Classe de Caractere: Exemplos
1 public class CustomCharClassExamples {
2 public static void main(String[] args){
3 String t = "It was the best of times";
4
5 Pattern p1 = Pattern.compile("w.s");
6 Matcher m1 = p1.matcher(t);
7 if (m1.find()) { System.out.println("Found: " + m1.group());
8 }
9
10 Pattern p2 = Pattern.compile("w[abc]s");
11 Matcher m2 = p2.matcher(t);
12 if (m2.find()) { System.out.println("Found: " + m2.group());
13 }
14
15 Pattern p3 = Pattern.compile("t[^eou]mes");
16 Matcher m3 = p3.matcher(t);
17 if (m3.find()) { System.out.println("Found: " + m3.group());
18 }
O exemplo no slide mostra duas maneiras de localizar was e uma maneira de localizar times.
Para que isso acontea em Java:
1. Crie um objeto Pattern para armazenar a expresso regular com a qual voc deseja
realizar a pesquisa.
2. Crie um objeto Matcher passando o texto a ser pesquisado para o objeto Pattern e
retornando um Matcher.
3. Chame Matcher.find() para pesquisar o texto com o Pattern definido.
4. Chame Matcher.group() para exibir os caracteres que correspondem ao padro.
Programao Java SE 7 8 - 22
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Classes de Caractere Predefinidas
Caractere
Predefinido
Classe de
Caractere
Caractere
Cancelado
Classe Cancelada
\d (dgito) [0-9] \D
[^0-9]
\w (caractere de
palavra)
[a-zA-Z0-9_] \W
[^a-zA-Z0-9_]
\s (espao em
branco)
[ \r\t\n\f\0XB] \S
[^ \r\t\n\f\0XB]
Diversas classes de caractere so usadas repetidas vezes. Essas classes so transformadas em
classes de caractere predefinidas. As classes existem para identificar dgitos, caracteres de
palavra e espao em branco.
Caracteres de Espao em Branco
\t: Caractere de tabulao
\n: Caractere de nova linha
\r: Retorno de carro
\f: Alimentao de formulrio
\x0B: Tabulao vertical
Programao Java SE 7 8 - 23
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Classe de Caractere Predefinida: Exemplos
String de
Destino
Jo told me 20 ways to San Jose in 15 minutes.
Padro Descrio Correspondncia
de Texto
\\d\\d
Localiza dois dgitos.** Jo told me 20 ways
to San Jose in 15
minutes.
\\sin\\s
Localiza in entre dois espaos
e os trs caracteres seguintes.
Jo told me 20 ways
to San Jose in 15
minutes.
\\Sin\\S
Localiza in entre dois
caracteres que no sejam
espao e os trs caracteres
seguintes.
Jo told me 20 ways
to San Jose in 15
minutes.
** Se houver correspondncias adicionais na linha atual, chamadas extras para find()
retornaro a prxima correspondncia nessa linha.
Exemplo:
Pattern p1 = Pattern.compile("\\d\\d");
Matcher m1 = p1.matcher(t);
while (m1.find()){
System.out.println("Found: " + m1.group());
}
Produz:
Found: 20
Found: 15
O cdigo desse exemplo pode ser encontrado no projeto StringExamples do arquivo
PredefinedCharClassExample.java.
Programao Java SE 7 8 - 24
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Quantificadores
Quantificador Descrio
*
O caractere anterior repetido zero ou mais vezes.
+
O caractere anterior repetido uma ou mais vezes.
?
O caractere anterior deve aparecer uma vez ou no deve
aparecer.
{n}
O caractere anterior aparece exatamente n vezes.
{m,n}
O caractere anterior aparece de m a n vezes.
{m,}
O caractere anterior aparece m ou mais vezes.
(xx){n}
Este grupo de caracteres repetido n vezes.
Os quantificadores permitem que voc selecione facilmente um intervalo de caracteres nas
consultas.
Programao Java SE 7 8 - 25
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Programao Java SE 7 8 - 26
O cdigo desse exemplo pode ser encontrado no projeto StringExamples do arquivo
QuantifierExample.java.
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Quantificador: Exemplos
String de
Destino
Longlonglong ago, in a galaxy far far away
Padro Descrio Correspondncia
de Texto
ago.* Localiza ago e 0 ou todos os
caracteres restantes na linha.
Longlonglong ago, in
a galaxy far far away
gal.{3} Corresponde a gal mais os trs
caracteres seguintes. Isso
substitui conforme usado em
um exemplo anterior.
Longlonglong ago, in
a galaxy far far away
(long){2} Localiza long duas vezes. Longlonglong ago, in
a galaxy far far away
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Voracidade
Uma expresso regular sempre tenta capturar o mximo
de caracteres possvel.
Use o operador ? para limitar a pesquisa
correspondncia mais curta possvel.
String de
Destino
Longlonglong ago, in a galaxy far far away.
Padro Descrio Correspondncia
de Texto
ago.*far
Uma expresso regular sempre
captura o mximo de caracteres
possvel.
Longlonglong ago, in
a galaxy far far away.
ago.*?far
O caractere ? desativa
principalmente a voracidade.
Longlonglong ago, in
a galaxy far far away.
Uma expresso regular sempre tenta estabelecer correspondncia com um padro que retorne o
maior nmero de caracteres. Esse mecanismo conhecido como princpio da voracidade. Use o
operador ? para limitar o resultado menor quantidade de caracteres necessria para fazer a
correspondncia do padro.
O cdigo desse exemplo pode ser encontrado no projeto StringExamples do arquivo
GreedinessExample.java.
Programao Java SE 7 8 - 27
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Quiz
Qual smbolo corresponde ao caracter que repetido um ou
mais vezes?
a. *
b. +
c. .
d. ?
Programao Java SE 7 8 - 28
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Objetos Matcher de Limite
ncora Descrio
^
Corresponde ao incio de uma linha
$
Corresponde ao fim de uma linha
\b
Corresponde ao incio ou fim de uma palavra
\B
No corresponde ao incio ou fim de uma palavra
Os caracteres de limite podem ser usados para fazer a correspondncia de diferentes partes de
uma linha.
Programao Java SE 7 8 - 29
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
O cdigo desse exemplo pode ser encontrado no projeto StringExamples do arquivo
BoundaryCharExample.java.
Programao Java SE 7 8 - 30
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Limite: Exemplos
String de
Destino
it was the best of times or it was the worst of times
Padro Descrio Correspondncia
de Texto
^it.*?times
A sequncia que inicia uma linha
com it seguida por alguns
caracteres e times, com a
voracidade desativada
It was the best of
times or it was the
worst of times
\\sit.*times$
A sequncia que inicia com it
seguida por alguns caracteres e
encerra a linha com times
It was the best of
times or it was the
worst of times
\\bor\\b.{3}
Localiza or delimitada por
palavras, mais os trs caracteres
seguintes.
It was the best of
times or it was the
worst of times
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Quiz
Qual smbolo corresponde ao fim de uma linha?
a. *
b. +
c. $
d. ^
Programao Java SE 7 8 - 31
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Com as expresses regulares, possvel usar parnteses para identificar partes de uma string.
Esse exemplo corresponde s partes componentes de um endereo de e-mail. Observe como
cada par de parnteses numerado. Em uma expresso regular, group(0) corresponde a todo
o texto retornado quando os grupos so usados.. Este o cdigo de origem do exemplo:
public class MatchingExample {
public static void main(String[] args){
String email = "george.washington@example.com";
Pattern p1 = Pattern.compile("(\\S+?)\\.(\\S+?)\\@(\\S+)");
Matcher m1 = p1.matcher(email);
if (m1.find()){
System.out.println("First: " + m1.group(1));
System.out.println("Last: " + m1.group(2));
System.out.println("Domain: " + m1.group(3));
System.out.println("Everything Matched: " + m1.group(0));
}
}
}
Programao Java SE 7 8 - 32
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Correspondncia e Grupos
String de Destino george.washington@example.com
3 Partes da
Correspondncia
(george).(washington)@(example.com)
Nmeros de
Grupo
( 1 ).( 2 )@( 3 )
Padro (\\S+?)\\.(\\S+?)\\@(\\S+)
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Usando o Mtodo replaceAll
Usando o mtodo replaceAll, possvel pesquisar
e substituir.
public class ReplacingExample {
public static void main(String[] args){
String header = "<h1>This is an H1</h1>";
Pattern p1 = Pattern.compile("h1");
Matcher m1 = p1.matcher(header);
if (m1.find()){
header = m1.replaceAll("p");
System.out.println(header);
}
}
}
possvel fazer uma pesquisa e substituio usando o mtodo replaceAll depois que fizer
uma busca.
A sada do programa a seguinte:
<p>This is an H1</p>
Programao Java SE 7 8 - 33
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Resumo
Nesta lio, voc aprendeu a:
Ler dados na linha de comando
Pesquisar strings
Analisar strings
Criar strings usando um StringBuilder
Pesquisar strings usando expresses regulares
Analisar strings usando expresses regulares
Substituir strings usando expresses regulares
Programao Java SE 7 8 - 34
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Exerccio 8-1 - Viso Geral:
Analisando Texto com split()
Este exerccio aborda o uso do mtodo String.split()
para analisar o texto.
Programao Java SE 7 8 - 35
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Exerccio 8-2 - Viso Geral:
Criando um Programa de Pesquisa
de Expresso Regular
Este exerccio aborda a criao de um programa que executa
pesquisas em um arquivo de texto usando uma expresso
regular.
Programao Java SE 7 8 - 36
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Exerccio 8-3 - Viso Geral:
Transformando HTML com
Expresses Regulares
Este exerccio aborda a transformao do HTML de um
arquivo usando vrias expresses regulares.
Programao Java SE 7 8 - 37
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

E
r
r
o
r

:

Y
o
u

a
r
e

n
o
t

a

V
a
l
i
d

P
a
r
t
n
e
r

u
s
e

o
n
l
y
T
H
E
S
E

e
K
I
T

M
A
T
E
R
I
A
L
S

A
R
E

F
O
R

Y
O
U
R

U
S
E

I
N

T
H
I
S

C
L
A
S
S
R
O
O
M

O
N
L
Y
.


C
O
P
Y
I
N
G

e
K
I
T

M
A
T
E
R
I
A
L
S

F
R
O
M

T
H
I
S

C
O
M
P
U
T
E
R

I
S

S
T
R
I
C
T
L
Y

P
R
O
H
I
B
I
T
E
D

You might also like