Você está na página 1de 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