Professional Documents
Culture Documents
o
m
u
i
t
o
o
r
i
e
n
t
a
d
o
a
o
b
j
e
t
o
s
!
Problema de Design
Qual o problema no exemplo mostrado no slide? Cada mtodo efetua o clculo com base
no tipo de funcionrio especificado e retorna o nmero de aes.
Considere o que aconteceria se voc adicionasse mais dois ou trs tipos de funcionrio.
Seria preciso adicionar trs mtodos adicionais e, possivelmente, replicar cdigo
dependendo da lgica de negcios necessria para calcular as aes.
Claramente, essa no uma maneira adequada de tratar esse problema. Embora o cdigo
funcione, no ser de fcil leitura e provvel que crie bastante cdigo duplicado.
Programao Java SE 7 4 - 12
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Aplicando o Polimorfismo
Uma prtica recomendada especificar parmetros e criar
mtodos que usem a forma mais genrica possvel do seu
objeto.
public class EmployeeStockPlan {
public int grantStock (Employee e) {
// perform a calculation based on Employee data
}
}
// In the application class
EmployeeStockPlan esp = new EmployeeStockPlan ():
Manager m = new Manager ();
int stocksGranted = grantStock (m);
...
Use a Forma Mais Genrica
Uma prtica recomendada criar mtodos que usem a forma mais genrica possvel do seu
objeto.
Nesse caso, Employee uma classe bsica adequada para usar como ponto de partida.
Mas como voc sabe qual tipo de objeto especificado? A resposta est no prximo slide.
Programao Java SE 7 4 - 13
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Usando a Palavra-chave instanceof
A linguagem Java fornece a palavra-chave instanceof para
determinar o tipo de classe de um objeto no runtime.
1 public class EmployeeStockPlan {
2 public int grantStock (Employee e) {
3 // perform a calculation based on Employee data
4 if (e instanceof Manager) {
5 // process Manager stock grant
6 } else if (e instanceof Engineer) {
7 // process Engineer stock grant
8 } else if (e instanceof Admin) {
9 // process Admin stock grant
10 } else {
11 // perhaps an error a generic Employee?
12 }
13 }
14}
Nessa classe EmployeeStockPlan modificada, o mtodo grantStock usa instanceof
para determinar qual tipo de Employee foi especificado para o mtodo.
Outra abordagem desse problema usar o novo recurso no JDK 7 para ativar objetos String:
String type = emp.getClass().getSimpleName();
switch (type) {
case "Engineer":
// process Engineer grant
case "Admin":
// process Admin grant
case "Manager":
// process Manager grant
case "Director":
// process Director grant
default:
// error result
}
Programao Java SE 7 4 - 14
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Converso de Referncias de Objeto
Aps usar o operador instanceof para verificar se o
objeto que voc recebeu como argumento uma subclasse,
possvel acessar a funcionalidade completa do objeto
convertendo a referncia:
1 public void modifyDeptForManager (Employee e, String dept) {
2 if (e instanceof Manager) {
3 Manager m = (Manager) e;
4 m.setDeptName (dept);
5 }
6 }
Sem a converso em Manager, o mtodo setDeptName
no seria compilado.
Embora uma referncia de superclasse genrica seja til para especificar objetos, talvez seja
necessrio usar um mtodo da subclasse.
No slide, por exemplo, voc precisa do mtodo setDeptName da classe Manager. Para
satisfazer o compilador, possvel converter uma referncia da superclasse genrica na
classe especfica.
No entanto, h regras para converso de referncias. Isso mostrado no prximo slide.
Programao Java SE 7 4 - 15
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Regras de Converso
As converses ascendentes sempre so permitidas e no
exigem um operador de converso.
Director d = new Director();
Manager m = new Manager();
Employee e = m; // OK
Manager m = d; // OK
Employee e = d; // OK
Programao Java SE 7 4 - 16
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Regras de Converso
Para converses descendentes, o compilador precisa estar
convencido de que a converso , pelo menos, possvel.
Employee e = new Manager();
Manager m = new Manager();
Manager m = (Manager)e;
// Would also work if
// e was a Director obj
Director d = (Director)m;
// fails at run time
Engineer eng = (Engineer)m;
// compiler error
Converses Descendentes
Com uma converso descendente, o compilador simplesmente determina se a converso
possvel. Caso se trate da converso em uma subclasse, possvel que a converso tenha
sucesso.
Observe que, no runtime, a converso resultar em uma
java.lang.ClassCastException se a referncia de objeto for de uma superclasse e
no do tipo classe ou de uma subclasse.
A converso da varivel e em uma referncia Manager m satisfaz o compilador, pois
Manager e Employee esto na mesma hierarquia de classe e, por isso, a converso poder
ter sucesso. Essa converso tambm funciona no runtime, pois, na verdade, a varivel e
um objeto Manager. Essa converso tambm funcionaria no runtime se e apontasse para
uma instncia de um objeto Director.
A converso da varivel m em uma instncia de Director satisfaz o compilador. No entanto,
como m , na verdade, uma instncia de Manager, essa converso falhar no runtime com
uma ClassCastException.
Por fim, qualquer converso que esteja fora da hierarquia de classe falhar, como a
converso de uma instncia de Manager em Engineer. Um gerente (Manager) e um
engenheiro (Engineer) so ambos funcionrios, mas um gerente (Manager) no um
engenheiro (Engineer).
Programao Java SE 7 4 - 17
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Substituindo Mtodos de Objeto
Uma das vantagens da herana nica que, por default, toda
classe tem um objeto pai. A classe-raiz de toda classe Java
java.lang.Object.
No necessrio declarar que a sua classe estende
Object. O compilador faz isso para voc.
public class Employee { //... }
equivalente a:
public class Employee extends Object { //... }
A classe-raiz contm vrios mtodos no-finais, mas trs
para os quais importante considerar a substituio:
toString, equals e hashCode
Melhor Prtica: Sobrecarregar Mtodos de Objeto
A classe java.lang.Object a classe-raiz de todas as classes na linguagem de
programao Java. Por default, todas as classes subclassificaro Object.
Object define vrios mtodos no-finais que foram criados para serem substitudos pela sua
classe. So eles: equals, hashCode, toString, clone e finalize. H trs desses
mtodos para os quais voc deve considerar a substituio.
Programao Java SE 7 4 - 18
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Mtodo Object toString
O mtodo toString chamado sempre que uma instncia
da sua classe especificada para um mtodo que recebe um
objeto String, como println:
Employee e = new Employee (101, "Jim Kern", ...)
System.out.println (e);
possvel usar toString para fornecer informaes
sobre a instncia:
public String toString () {
return "Employee id: " + empId + "\n"
"Employee name:" + name;
}
Essa abordagem melhor para obter detalhes sobre a sua
classe do que criar o seu prprio mtodo getDetails.
Observao: Em alguns casos, voc desejar ter a possibilidade de imprimir o nome da
classe que est executando um mtodo. O mtodo getClass() um mtodo Object
utilizado para retornar uma instncia de objeto Class, e o mtodo getName() fornece o
nome totalmente qualificado da classe de runtime.
getClass().getName(); // returns the name of this class instance
Esses mtodos esto na classe Object.
Programao Java SE 7 4 - 19
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Mtodo Object equals
O mtodo Object equals compara somente referncias de objeto.
Se houver dois objetos x e y em uma classe, x ser igual a y
se, e somente se, x e y fizerem referncia ao mesmo objeto.
Exemplo:
Employee x = new Employee (1,"Sue","111-11-1111",10.0);
Employee y = x;
x.equals (y); // true
Employee z = new Employee (1,"Sue","111-11-1111",10.0);
x.equals (z); // false!
Como o que desejamos testar o contedo do objeto Employee,
precisamos substituir o mtodo equals:
public boolean equals (Object o) { ... }
O mtodo equals de Object determina (por default) somente se os valores de duas
referncias de objeto apontam para o mesmo objeto. Basicamente, o teste na classe Object
simplesmente o seguinte:
Se x == y, retornar true.
Para um objeto (como Employee) que contm valores, essa comparao no suficiente,
especialmente se desejarmos verificar se existe um e somente um funcionrio com um ID
especfico.
Programao Java SE 7 4 - 20
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Substituindo equals em Employee
Um exemplo de substituio do mtodo equals na classe
Employee compara cada campo quanto igualdade:
1 public boolean equals (Object o) {
2 boolean result = false;
3 if ((o != null) && (o instanceof Employee)) {
4 Employee e = (Employee)o;
5 if ((e.empId == this.empId) &&
6 (e.name.equals(this.name)) &&
7 (e.ssn.equals(this.ssn)) &&
8 (e.salary == this.salary)) {
9 result = true;
10 }
11 }
12 return result;
13 }
Esse teste equals simples verifica primeiro se o objeto especificado no nulo e, em
seguida, verifica se uma instncia de uma classe Employee (todas as subclasses tambm
so funcionrios; por isso, funciona). Em seguida, Object convertido em Employee, e
cada campo em Employee verificado quanto igualdade.
Observao: Para tipos de String, necessrio usar o mtodo equals para testar as
strings caractere por caractere quanto igualdade.
Programao Java SE 7 4 - 21
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Substituindo Object hashCode
O contrato geral de Object determina que, se dois objetos
forem considerados iguais (usando o mtodo equals),
o hashcode inteiro retornado para os dois objetos tambm
dever ser igual.
1 // Generated by NetBeans
2 public int hashCode() {
3 int hash = 7;
4 hash = 83 * hash + this.empId;
5 hash = 83 * hash + Objects.hashCode(this.name);
6 hash = 83 * hash + Objects.hashCode(this.ssn);
7 hash = 83 * hash + (int)
(Double.doubleToLongBits(this.salary) ^
(Double.doubleToLongBits(this.salary) >>> 32));
8 return hash;
9 }
Substituindo hashCode
A documentao Java da classe Objectdetermina:
"... Em geral, necessrio substituir o mtodo hashCodesempre que esse mtodo [equals]
substitudo, para manter o contrato geral do mtodo hashCode, que determina que objetos
iguais devem ter hashcodes iguais."
O mtodo hashCode utilizado em conjunto com o mtodo equals em conjuntos baseados
em hash, como HashMap, HashSet e Hashtable.
fcil errar com esse mtodo. Por isso, preciso ter cuidado. A boa notcia que IDEs,
como o NetBeans, podem gerar hashCode para voc.
Para criar a sua prpria funo hash, o seguinte procedimento ajudar a chegar a um valor
hash razovel para instncias iguais e no iguais:
1) Comece com uma constante inteira diferente de zero. Nmeros primos resultam em
menos colises de hashcode.
2) Para cada campo utilizado no mtodo equals, calcule um hashcode int para o
campo. Observe que, para Strings, possvel usar o hashCode de String.
3) Some os hashcodes calculados.
4) Retorne o resultado.
Programao Java SE 7 4 - 22
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Resumo
Nesta lio, voc aprendeu a:
Usar nveis de acesso: private, protected, default
e public
Substituir mtodos
Sobrecarregar construtores e outros mtodos
adequadamente
Usar o operador instanceof para comparar tipos
de objeto
Usar chamada de mtodo virtual
Usar converses ascendentes e descendentes
Substituir mtodos da classe Object
para melhorar a funcionalidade da sua
classe
Programao Java SE 7 4 - 23
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Quiz
Suponha que voc tenha uma classe Account com um
mtodo withdraw() e uma classe Checkingque estende
Accounte declara seu prprio mtodo withdraw(). Qual o
resultado do fragmento de cdigo a seguir?
1 Account acct = new Checking();
2 acct.withdraw(100);
a. O compilador reclama da linha 1.
b. O compilador reclama da linha 2.
c. Erros de runtime: designao incompatvel (linha 1)
d. O mtodo Account.withdraw() executado.
e. O mtodo Checking.withdraw() executado.
Programao Java SE 7 4 - 24
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Quiz
Suponha que voc tenha uma classe Account e uma classe
Checking que estenda Account. O corpo da instruo if na
linha 2 ser executado.
1 Account acct = new Checking();
2 if (acct instanceof Checking) { // will this block run? }
a. Verdadeiro
b. Falso
Programao Java SE 7 4 - 25
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Quiz
Suponha que voc tenha uma classe Account e uma classe
Checking que estenda Account. Voc tambm tem uma
classe Savings que estende Account. Qual o resultado do
cdigo a seguir?
1 Account acct1 = new Checking();
2 Account acct2 = new Savings();
3 Savings acct3 = (Savings)acct1;
a. acct3 contm a referncia a acct1.
b. Ocorre uma ClassCastException de runtime.
c. O compilador reclama da linha 2.
d. O compilador reclama da converso na linha 3.
Programao Java SE 7 4 - 26
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Quiz
1 package com.bank;
2 public class Account {
3 double balance;
4 }
10 package com.bank.type;
11 import com.bank.Account;
12 public class Savings extends Account {
13 private double interest;
14 Account acct = new Account();
15 public double getBalance (){ return (interest + balance); }
16 }
Qual alterao permitiria a compilao desse cdigo?
a. Tornar balance private na linha 3.
b. Tornar balance protected na linha 3.
c. Substituir balance por acct.balance na linha 15.
d. Substituir balance por Account.balance na
linha 15.
Programao Java SE 7 4 - 27
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Exerccio 4-1 Viso Geral:
Substituindo Mtodos e Aplicando Polimorfismo
Este exerccio abrange os seguintes tpicos:
Modificando as classes Employee, Manager e
Director; substituindo o mtodo toString()
Criando uma classe EmployeeStockPlan com um
mtodo de concesso de aes que usa a palavra-chave
instanceof
Programao Java SE 7 4 - 28
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Design de Classe Avanado
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Objetivos
Aps concluir esta lio, voc ser capaz de:
Criar classes bsicas de propsito geral usando classes
abstratas
Construir classes e subclasses Java abstratas
Modelar problemas de negcios usando as palavras-
chave static e final
Implementar o padro de design singleton
Distinguir entre classes aninhadas e de nvel mais alto
Programao Java SE 7 5 - 2
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Modelando Problemas de Negcios com Classes
Herana (ou criao de subclasses) um recurso essencial
da linguagem de programao Java. A herana permite a
reutilizao de cdigo por meio de:
Herana de mtodo: As subclasses evitam a duplicao
de cdigo por meio da herana de implementaes de
mtodos.
Generalizao: O cdigo criado para se basear no tipo
mais genrico possvel de mais fcil manuteno.
Diagrama de Herana de Classe
Herana de Classe
Ao criar uma soluo orientada a objetos, necessrio evitar a duplicao de cdigo. Uma
tcnica para evitar duplicao criar classes e mtodos de biblioteca. As bibliotecas
funcionam como ponto central de armazenamento de cdigo reutilizado com frequncia.
Outra tcnica para evitar duplicao de cdigo usar herana de classes. Quando h um
tipo bsico compartilhado identificado entre duas classes, qualquer cdigo compartilhado
pode ser inserido em uma classe me.
Quando possvel, use referncias de objeto do tipo bsico mais genrico possvel. Em Java,
a generalizao e a especializao permitem a reutilizao por meio de herana de mtodos
e chamada de mtodo virtual (VMI, virtual method invocation). A VMI, tambm denominada
ligao tardia, permite que o chamador chame um mtodo de forma dinmica, desde que o
mtodo tenha sido declarado em um tipo bsico genrico.
Programao Java SE 7 5 - 3
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Permitindo Generalizao
A codificao para um tipo bsico comum permite a introduo
de novas subclasses com pouca ou nenhuma modificao de
qualquer cdigo que dependa do tipo bsico mais genrico.
ElectronicDevice dev = new Television();
dev.turnOn(); // all ElectronicDevices can be turned on
Sempre use o tipo de referncia mais genrico possvel.
Codificando para Generalizao
Sempre use o tipo de referncia mais genrico possvel. Os IDEs Java podem conter
ferramentas de refatorao que ajudam a alterar referncias existentes para um tipo bsico
mais genrico.
Programao Java SE 7 5 - 4
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Identificando a Necessidade de Classes Abstratas
As subclasses podem no precisar herdar uma implementao
de mtodo se o mtodo for especializado.
public class Television extends ElectronicDevice {
public void turnOn() {
changeChannel(1);
initializeScreen();
}
public void turnOff() {}
public void changeChannel(int channel) {}
public void initializeScreen() {}
}
Implementaes de Mtodos
Quando classes irms tm um mtodo comum, ele geralmente inserido em uma classe
me. Em determinadas circunstncias, entretanto, a implementao da classe me sempre
precisar ser substituda por uma implementao especializada.
Nesses casos, a incluso do mtodo em uma classe me tem vantagens e desvantagens.
Ela permite o uso de tipos de referncia genricos, mas os desenvolvedores podem se
esquecer facilmente de fornecer a implementao especializada nas subclasses.
Programao Java SE 7 5 - 5
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Definindo Classes Abstratas
Uma classe pode ser declarada como abstrata por meio do
modificador de nvel de classe abstract.
public abstract class ElectronicDevice { }
possvel subclassificar uma classe abstrata.
public class Television extends ElectronicDevice { }
No possvel instanciar uma classe abstrata.
ElectronicDevice dev = new ElectronicDevice(); // error
Declarar uma classe como abstrata impede a criao de instncias dessa classe. um erro
de tempo de compilao instanciar uma classe abstrata. Em geral, uma classe estendida
por uma classe filha e pode ser usada como tipo de referncia.
Programao Java SE 7 5 - 6
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Definindo Mtodos Abstratos
Um mtodo pode ser declarado como abstrato por meio do
modificador de nvel de mtodo abstract.
public abstract class ElectronicDevice {
public abstract void turnOn();
public abstract void turnOff();
}
Um mtodo abstrato:
No pode ter um corpo de mtodo
Precisa ser declarado em uma classe abstrata
substitudo em subclasses
Sem chaves
Herdando Mtodos Abstratos
Quando uma classe filha herda um mtodo abstrato, ela est herdado uma assinatura de
mtodo, mas nenhuma implementao. Por esse motivo, no so permitidas chaves ao
definir um mtodo abstrato.
Um mtodo abstrato uma maneira de garantir que qualquer classe filha contenha um
mtodo com uma assinatura correspondente.
Programao Java SE 7 5 - 7
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Validando Classes Abstratas
As seguintes regras adicionais so aplicadas quando voc usa
classes e mtodos abstratos:
Uma classe abstrata pode ter qualquer nmero de
mtodos abstratos e no abstratos.
Na herana de uma classe abstrata, necessrio executar
um destes procedimentos:
Declarar a classe filha como abstrata.
Substituir todos os mtodos abstratos herdados da classe
me. Se isso no for feito, ocorrer um erro de tempo de
compilao.
error: Television is not abstract and does not override
abstract method turnOn() in ElectronicDevice
Usando Classes Abstratas
Embora seja possvel evitar a implementao de um mtodo abstrato declarando classes
filhas como abstratas, isso apenas adia o inevitvel. As aplicaes exigem mtodos
no abstratos para criar objetos. Use mtodos abstratos para descrever a funcionalidade
necessria em classes filhas.
Programao Java SE 7 5 - 8
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Quiz
Para que seja compilado com sucesso, um mtodo abstrato
no pode ter:
a. Um valor de retorno
b. Uma implementao de mtodo
c. Parmetros de mtodo
d. Acesso private
Programao Java SE 7 5 - 9
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Palavra-chave static
O modificador static usado para declarar campos e
mtodos como recursos do nvel da classe. Membros de classe
estticos:
Podem ser utilizados sem instncias de objeto
So utilizados quando um problema melhor resolvido
sem objetos
So utilizados quando objetos do mesmo tipo precisam
compartilhar campos
No devem ser utilizados para ignorar os recursos
orientados a objetos do Java, a menos que haja um bom
motivo
Java: Orientada a Objetos por Design
A linguagem de programao Java foi criada como uma linguagem orientada a objetos,
diferentemente de linguagens como Objective-C e C++, que herdaram o design procedural
do C. Ao desenvolver em Java, necessrio sempre tentar criar uma soluo orientada a
objetos.
Programao Java SE 7 5 - 10
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Mtodos Estticos
Mtodos estticos so aqueles que podem ser chamados
mesmo que a classe em que so declarados no tenha sido
instanciada. Mtodos estticos:
So chamados de mtodos de classe
So teis para APIs que no so orientadas a objetos.
java.lang.Math contm vrios mtodos estticos
So comumente utilizados no lugar de construtores para
executar tarefas relacionadas inicializao de objetos
No podem acessar membros no estticos na mesma
classe
Podem ser ocultados em subclasses, mas no
substitudos
Sem chamada de mtodo virtual
Mtodos de Fbrica
Em vez de chamar construtores diretamente, voc normalmente usar mtodos estticos
para recuperar referncias de objeto. A menos que algo inesperado ocorra, um novo objeto
criado sempre que um construtor chamado. Um mtodo de fbrica esttico poderia manter
um cache de objetos para reutilizar ou criar novas instncias se o cache fosse esvaziado. Um
mtodo de fbrica tambm pode produzir um objeto que subclassifica o tipo de retorno do
mtodo.
Exemplo:
NumberFormat nf = NumberFormat.getInstance();
Programao Java SE 7 5 - 11
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Implementando Mtodos Estticos
public class StaticErrorClass {
private int x;
public static void staticMethod() {
x = 1; // compile error
instanceMethod(); // compile error
}
public void instanceMethod() {
x = 2;
}
}
Limitaes de Mtodos Estticos
Os mtodos estticos podem ser utilizados antes de serem criadas as instncias da classe
que os contm. Em termos cronolgicos, isso significa que, em uma JVM (Java Virtual
Machine) em execuo, no pode haver ocorrncias das variveis de instncia das classes
recipientes. Os mtodos estticos nunca podem acessar variveis de instncia da classe que
os contm ou chamar seus mtodos no estticos.
Programao Java SE 7 5 - 12
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Chamando Mtodos Estticos
double d = Math.random();
StaticUtilityClass.printMessage();
StaticUtilityClass uc = new StaticUtilityClass();
uc.printMessage(); // works but misleading
sameClassMethod();
Ao chamar mtodos estticos, necessrio:
Qualificar o local do mtodo com um nome de classe se o
mtodo estiver localizado em uma classe que no seja a
chamadora
No necessrio para mtodos da mesma classe
Evitar usar uma referncia de objeto para chamar um
mtodo esttico
Programao Java SE 7 5 - 13
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Variveis Estticas
Variveis estticas so aquelas que podem ser acessadas
mesmo que a classe em que so declaradas no tenha sido
instanciada. As variveis estticas so:
Chamadas de variveis de classe
Limitadas a uma nica cpia por JVM
teis para armazenar dados compartilhados
Os mtodos estticos armazenam dados em variveis
estticas.
Todas as instncias de objeto compartilham uma nica cpia
das variveis estticas.
Inicializadas quando a classe recipiente carregada pela
primeira vez
Carregamento de Classes
As classes fornecidas pelo desenvolvedor de aplicaes so, normalmente, carregadas
sob demanda (primeira utilizao). As variveis estticas so inicializadas quando a classe
que as contm carregada. Uma tentativa de acessar um membro de classe esttico pode
acionar o carregamento de uma classe.
Programao Java SE 7 5 - 14
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Definindo Variveis Estticas
public class StaticCounter {
private static int counter = 0;
public StaticCounter() {
counter++;
}
public static int getCount() {
return counter;
}
}
Somente uma
cpia na memria
Tornando Variveis Estticas Persistentes
Vrias tecnologias que so utilizadas para tornar persistente o estado da aplicao em Java
somente salvam variveis de instncia. A manuteno de um nico objeto que mantm o
controle do estado compartilhado pode ser utilizada como uma alternativa a variveis
estticas.
Programao Java SE 7 5 - 15
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Usando Variveis Estticas
double p = Math.PI;
new StaticCounter();
new StaticCounter();
System.out.println("count: " + StaticCounter.getCount());
Ao acessar variveis estticas, necessrio:
Qualificar o local da varivel com um nome de classe se a
varivel estiver localizada em uma classe que no seja a
chamadora
No necessrio para variveis da mesma classe
Evitar usar uma referncia de objeto para acessar uma
varivel esttica
Referncias de Objeto a Membros Estticos
Da mesma forma que necessrio evitar o uso de referncias de objeto a membros
estticos, tambm deve ser evitado o uso de referncias de objeto para acessar variveis
estticas. Se todos os membros de uma classe forem estticos, considere a possibilidade de
usar um construtor privado para impedir a instanciao de objetos.
Programao Java SE 7 5 - 16
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Importaes Estticas
Uma instruo de importao esttica torna os membros
estticos de uma classe disponveis com seu nome simples.
Considerando-se uma das seguintes linhas:
import static java.lang.Math.random;
import static java.lang.Math.*;
A chamada ao mtodo Math.random()pode ser escrita
da seguinte forma:
public class StaticImport {
public static void main(String[] args) {
double d = random();
}
}
O uso excessivo de importao esttica pode prejudicar a leitura do cdigo. Evite adicionar
vrias importaes estticas a uma classe.
Programao Java SE 7 5 - 17
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Quiz
O nmero de instncias de uma varivel esttica est
relacionado ao nmero de objetos que foram criados.
a. Verdadeiro
b. Falso
Programao Java SE 7 5 - 18
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Mtodos Finais
Um mtodo pode ser declarado final. Os mtodos finais no
podem ser substitudos.
public class MethodParentClass {
public final void printMessage() {
System.out.println("This is a final method");
}
}
public class MethodChildClass extends MethodParentClass {
// compile-time error
public void printMessage() {
System.out.println("Cannot override method");
}
}
Mitos de Desempenho
H pouco ou nenhum benefcio de desempenho na declarao de um mtodo como final. Os
mtodos devem ser declarados como finais somente para desativar a substituio de
mtodos.
Programao Java SE 7 5 - 19
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Classes Finais
Uma classe pode ser declarada final. As classes finais no
podem ser estendidas.
public final class FinalParentClass { }
// compile-time error
public class ChildClass extends FinalParentClass { }
Programao Java SE 7 5 - 20
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Variveis Finais
O modificador final pode ser aplicado a variveis. As
variveis finais no podem mudar seus valores depois que
so inicializadas. As variveis finais podem ser:
Campos de classe
Campos finais com expresses constantes de tempo de
compilao so variveis constantes.
possvel combinar static com final para criar uma varivel
que nunca muda e est sempre disponvel.
Parmetros de mtodo
Variveis locais
Observao: As referncias finais sempre devem se referir
ao mesmo objeto, mas o contedo desse objeto pode ser
modificado.
Benefcios e Desvantagens das Variveis Finais
Preveno contra Bugs
As variveis finais nunca podem ter seus valores modificados depois que so inicializadas.
Esse comportamento funciona como um mecanismo de preveno contra bugs.
Segurana do Thread
A natureza imutvel das variveis finais elimina as preocupaes inerentes ao acesso
concorrente por vrios threads.
Referncia Final a Objetos
Uma referncia de objeto final serve apenas para impedir que uma referncia aponte para
outro objeto. Se voc estiver criando objetos imutveis, dever impedir que os campos do
objeto sejam modificados. As referncias finais tambm impedem que voc designe um valor
null referncia. A manuteno das referncias de um objeto impede que o objeto fique
disponvel para coleta de lixo.
Programao Java SE 7 5 - 21
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Declarando Variveis Finais
public class VariableExampleClass {
private final int field;
private final int forgottenField;
private final Date date = new Date();
public static final int JAVA_CONSTANT = 10;
public VariableExampleClass() {
field = 100;
}
public void changeValues(final int param) {
param = 1; // compile-time error
date.setTime(0); // allowed
date = new Date(); // compile-time error
final int localVar;
localVar = 42;
localVar = 43; // compile-time error
}
}
Campos Finais
Inicializando
Os campos finais (variveis de instncia) devem ter um dos seguintes valores:
Um valor designado quando for declarado
Um valor designado em cada construtor
Combinao de Esttico e Final
Um campo que esttico e final considerado uma constante. Por conveno, os campos
de constante usam identificadores compostos somente de letras maisculas e caracteres de
sublinhado.
Programao Java SE 7 5 - 22
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Quiz
Um campo final (varivel de instncia) podem ter um valor
designado quando for declarado ou em todos os construtores.
a. Verdadeiro
b. Falso
Programao Java SE 7 5 - 23
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Quando Evitar Constantes
As variveis public static finalpodem ser muito teis,
mas h um padro de uso especfico que voc deve evitar. As
constantes podem fornecer uma noo falsa de validao de
entrada ou verificao de faixa de valores.
Considere um mtodo que deve receber somente um dos
trs valores possveis:
Computer comp = new Computer();
comp.setState(Computer.POWER_SUSPEND);
Ainda assim, as seguintes linhas de cdigo sero
compiladas:
Computer comp = new Computer();
comp.setState(42);
Esta uma constante
int que igual a 2.
Verificao de Faixa de Runtime
No exemplo mostrado no slide, necessrio executar uma verificao de faixa de runtime ao
usar um int para representar o estado. No mtodo setState, possvel usar uma
instruo if para verificar se somente os valores 0, 1 ou 2 so aceitos. Esse tipo de
verificao executado toda vez que o mtodo setState chamado, resultando em
overhead adicional.
Programao Java SE 7 5 - 24
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Enumeraes Typesafe
O Java 5 adicionou uma enumerao typesafe linguagem.
As enumeraes:
So criadas por meio de uma variao de uma classe Java
Fornecem uma verificao de faixa de tempo de compilao
public enum PowerState {
OFF,
ON,
SUSPEND;
}
Uma enumerao pode ser utilizada da seguinte maneira:
Computer comp = new Computer();
comp.setState(PowerState.SUSPEND); Este mtodo recebe uma
referncia PowerState.
Estas so referncias aos trs
nicos objetos PowerState
que podem existir.
Verificao de Faixa de Tempo de Compilao
No exemplo mostrado no slide, o compilador executa uma verificao de tempo de
compilao para garantir que somente instncias vlidas de PowerState sejam
especificadas para o mtodo setState. No h overhead de verificao de faixa no
runtime.
Programao Java SE 7 5 - 25
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Uso de Enumerao
As referncias de enumerao podem ser importadas de forma
esttica.
import static com.example.PowerState.*;
public class Computer extends ElectronicDevice {
private PowerState powerState = OFF;
//...
}
As enumeraes podem ser utilizadas como a expresso em
uma instruo switch.
public void setState(PowerState state) {
switch(state) {
case OFF:
//...
}
}
Importada de forma esttica
PowerState.OFF
Programao Java SE 7 5 - 26
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Enumeraes Complexas
As enumeraes podem ter construtores privados, campos
e mtodos.
public enum PowerState {
OFF("The power is off"),
ON("The usage power is high"),
SUSPEND("The power usage is low");
private String description;
private PowerState(String d) {
description = d;
}
public String getDescription() {
return description;
}
}
O construtor no pode ser
public nem protected.
Chame um construtor
PowerState para inicializar a
referncia public static
final OFF.
Construtores de Enumerao
No possvel instanciar uma instncia de enumerao com new.
Programao Java SE 7 5 - 27
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Quiz
Uma enumerao pode ter um construtor com os seguintes
nveis de acesso:
a. public
b. protected
c. Default (nenhum nvel de acesso declarado)
d. private
Programao Java SE 7 5 - 28
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Padres de Design
Os padres de design so:
Solues reutilizveis para problemas comuns
de desenvolvimento de software
Documentados em catlogos de padres
Design Patterns: Elements of Reusable Object-Oriented
Software, escrito por Erich Gamma et al. (Gang of Four)
Um vocabulrio utilizado para discutir design
Catlogos de Padres de Design
H catlogos de padres disponveis para vrias linguagens de programao. A maioria dos
padres de design tradicionais se aplica a qualquer linguagem orientada a objetos. Um dos
livros mais conhecidos, Design Patterns: Elements of Reusable Object-Oriented Software,
usa uma combinao de C++, Smalltalk e diagramas para mostra possveis implementaes
de padres. Vrios desenvolvedores Java ainda consultam esse livro porque os conceitos se
aplicam a qualquer linguagem orientada a objetos.
Aprenda mais sobre padres de design e outras prticas recomendadas Java no curso Java
Design Patterns.
Programao Java SE 7 5 - 29
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Padro Singleton
O padro de design singleton descreve em detalhes uma
implementao de classe que pode ser instanciada apenas
uma vez.
public class SingletonClass {
private static final SingletonClass instance =
new SingletonClass();
private SingletonClass() {}
public static SingletonClass getInstance() {
return instance;
}
}
1
2
3
Implementando o Padro Singleton
O padro de design singleton um dos padres de design de criao categorizados em
Design Patterns: Elements of Reusable Object-Oriented Software.
Para implementar o padro de design singleton:
1. Use uma referncia esttica para apontar instncia especfica. Tornar a referncia
final garante que ela nunca far referncia a outra instncia.
2. Adicione um nico construtor privado classe singleton. O modificador privado permite
somente o acesso "mesma classe", o que probe qualquer tentativa de instanciar a
classe singleton, exceto para a tentativa da etapa 1.
3. Um mtodo de fbrica pblico retorna uma cpia da referncia singleton. Esse mtodo
declarado esttico para acessar o campo esttico declarado na etapa 1. Essa etapa
poderia usar uma varivel pblica, eliminando a necessidade do mtodo de fbrica. Os
mtodos de fbrica oferecem mais flexibilidade (por exemplo, implementando uma
soluo singleton por thread) e costumam ser utilizados na maioria das implementaes
singleton.
Para obter uma referncia singleton, chame o mtodo getInstance:
SingletonClass ref = SingletonClass.getInstance();
Programao Java SE 7 5 - 30
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Classes Aninhadas
Uma classe aninhada uma classe declarada no corpo
de outra classe. Classes aninhadas:
Tm vrias categorias
Classes internas
Classes de membro
Classes locais
Classes annimas
Classe aninhadas estticas
So comumente utilizadas em aplicaes com elementos
de GUI
Podem limitar a utilizao de uma "classe assistente"
classe de nvel mais alto que a contm
Motivos para Usar Classes Aninhadas
As informaes a seguir foram obtidas em
http://download.oracle.com/javase/tutorial/java/javaOO/nested.html.
Agrupamento Lgico de Classes
Se uma classe for til apenas para uma outra classe, lgico incorpor-la nessa classe e
manter as duas classes juntas. O aninhamento dessas "classes assistentes" torna seu pacote
mais eficiente.
Encapsulamento Ampliado
Considere duas classes de nvel mais alto, A e B, onde B precisa ter acesso a membros de A
que, do contrrio, seriam declarados como privados. Ao ocultar a classe B na classe A,
possvel declarar membros de A como privados e B pode acess-los. Alm disso, a prpria
classe B pode ser ocultada do mundo exterior.
Cdigo de Leitura e Manuteno Mais Fceis
O aninhamento de classes pequenas em classes de nvel mais alto coloca o cdigo mais
perto de onde utilizado.
Programao Java SE 7 5 - 31
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Classe Interna: Exemplo
public class Car {
private boolean running = false;
private Engine engine = new Engine();
private class Engine {
public void start() {
running = true;
}
}
public void start() {
engine.start();
}
}
Classes Internas e Classes Aninhadas Estticas
Uma classe interna considerada parte da classe externa e herda o acesso a todos os
membros privados da classe externa. O exemplo do slide mostra uma classe interna, que
uma classe membro. Tambm possvel declarar classes internas em um bloco de mtodo
(classes locais).
Uma classe aninhada esttica no uma classe interna, mas sua declarao se assemelha a
um modificador static adicional na classe aninhada. As classes aninhadas estticas
podem ser instanciadas antes da classe externa que as contm e, portanto, ter acesso
negado a todos os membros no estticos da classe que as contm.
Programao Java SE 7 5 - 32
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Classes Internas Annimas
Uma classe annima utilizada para definir uma classe sem
nome.
public class AnonymousExampleClass {
public Object o = new Object() {
@Override
public String toString() {
return "In an anonymous class method";
}
};
}
Uma Classe Sem Nome
No exemplo mostrado no slide, a classe java.lang.Object est sendo subclassificada, e
essa subclasse que est sendo instanciada. Quando voc compilar uma aplicao com
classes annimas, ser gerado um arquivo de classe separado seguindo a conveno de
nomeao Outer$1.class, onde 1 o nmero de ndice de classes annimas em uma
classe recipiente e Outer o nome da classe recipiente.
Classes internas annimas tambm podem ser classes locais.
Programao Java SE 7 5 - 33
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Quiz
Qual dos seguintes tipos de classe aninhada so classes
internas?
a. annimo
b. local
c. esttico
d. membro
Programao Java SE 7 5 - 34
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Resumo
Nesta lio, voc aprendeu a:
Criar classes bsicas de propsito geral usando classes
abstratas
Construir classes e subclasses Java abstratas
Modelar problemas de negcios usando as palavras-chave
static e final
Implementar o padro de design singleton
Distinguir entre classes aninhadas e de nvel mais alto
Programao Java SE 7 5 - 35
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Exerccio 5-1 Viso Geral:
Aplicando a Palavra-chave Abstrata
Este exerccio abrange os seguintes tpicos:
Identificando possveis problemas que podem ser
resolvidos com o uso de classes abstratas
Refatorando uma aplicao Java existente para usar
classes e mtodos abstratos
Programao Java SE 7 5 - 36
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Exerccio 5-2 Viso Geral:
Aplicando o Padro de Design Singleton
Este exerccio abrange o uso das palavras-chave static e final
e a refatorao de uma aplicao existente para implementar o
padro de design singleton.
Programao Java SE 7 5 - 37
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Exerccio 5-3 (Opcional) Viso Geral:
Usando Enumeraes Java
Este exerccio abrange a refatorao do cdigo de uma
aplicao existente para usar uma enumerao.
Programao Java SE 7 5 - 38
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Exerccio 5-4 (Opcional) Viso Geral:
Reconhecendo Classes Aninhadas
Este exerccio abrange a anlise de uma aplicao Java
existente e a identificao do nmero e dos tipos de classes
presentes.
Programao Java SE 7 5 - 39
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Herana com Interfaces Java
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Objetivos
Aps concluir esta lio, voc ser capaz de:
Modelar problemas de negcios usando interfaces
Definir uma interface Java
Escolher entre herana de interface e de classe
Estender uma interface
Refatorar o cdigo para implementar o padro DAO
Programao Java SE 7 6 - 2
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Substituio de Implementao
A capacidade de descrever tipos abstratos um recurso
avanado do Java. A abstrao permite:
Fcil manuteno
possvel substituir classes com erros lgicos por classes
novas e melhores.
Substituio de implementao
O pacote java.sql descreve os mtodos utilizados por
desenvolvedores para se comunicarem com bancos de
dados, mas a implementao especfica do fornecedor.
Diviso do trabalho
A descrio da API de negcios necessria para a UI de
uma aplicao permite o desenvolvimento conjunto da UI
e da lgica de negcios.
Abstrao
Voc acabou de aprender a definir tipos abstratos por meio de classes. Existem duas maneiras
de definir a abstrao de tipo em Java: classes e interfaces abstratas. Ao escrever o cdigo para
fazer referncia a tipos abstratos, voc no depende mais de classes de implementao
especficas. A definio desses tipos abstratos pode parecer trabalho extra no incio, mas pode
reduzir a refatorao posteriormente se for utilizada da forma adequada.
Programao Java SE 7 6 - 3
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Interfaces Java
As interfaces Java so utilizadas para definir tipos abstratos.
As interfaces:
Assemelham-se a classes abstratas que contm somente
mtodos abstratos pblicos
Descrevem mtodos que precisam ser implementados por
uma classe
Os mtodos no devem ter uma implementao {chaves}.
Podem conter campos de constante
Podem ser utilizadas como tipo de referncia
So componente essencial de vrios padres de design
Em Java, uma interface descreve um contrato para uma classe. O contrato descrito por uma
interface determina os mtodos que devem ser implementados em uma classe. As classes que
implementam o contrato devem cumprir todo o contrato ou ser declaradas abstract.
Programao Java SE 7 6 - 4
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Desenvolvendo Interfaces Java
As interfaces pblicas de nvel mais alto so declaradas em
seu prprio arquivo .java. Voc implementa as interfaces,
em vez de estend-las.
public interface ElectronicDevice {
public void turnOn();
public void turnOff();
}
public class Television implements ElectronicDevice {
public void turnOn() { }
public void turnOff() { }
public void changeChannel(int channel) {}
private void initializeScreen() {}
}
Regras de Interfaces
Modificadores de Acesso
Todos os mtodos em uma interface so public, mesmo que voc se esquea de declar-las
como public. No possvel declarar mtodos como private ou protected em uma
interface. O contrato descrito por uma interface uma API pblica que deve ser fornecida por
uma classe.
Modificador Abstrato
Como todos os mtodos so implicitamente abstratos (abstract), redundante (porm,
permitido) declarar um mtodo abstract. Como todos os mtodos de interface so abstratos,
no possvel fornecer uma implementao de mtodo, nem mesmo um conjunto vazio de
chaves.
Implementaes e Extenses
Uma classe pode estender uma classe me e, em seguida, implementar uma lista de interfaces
separadas por vrgula.
Programao Java SE 7 6 - 5
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Campos de Constante
As interfaces podem ter campos de constante.
public interface ElectronicDevice {
public static final String WARNING =
"Do not open, shock hazard";
public void turnOn();
public void turnOff();
}
Somente campos de constante so permitidos em uma interface. Quando voc declara um campo
em uma interface, ele implicitamente public, static e final. possvel especificar esses
modificadores de forma redundante. Evite agrupar todos os valores de constante de uma
aplicao em uma nica interface. Um bom design distribui os valores de constante de uma
aplicao entre vrias classes e interfaces. A criao de classes monolticas ou de interfaces que
contm grandes agrupamentos de cdigo no relacionado no segue as melhores prticas para
design orientado a objetos.
Programao Java SE 7 6 - 6
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Referncias de Interface
possvel usar uma interface como um tipo de referncia.
Ao usar um tipo de referncia de interface, necessrio usar
somente os mtodos descritos na interface.
ElectronicDevice ed = new Television();
ed.turnOn();
ed.turnOff();
ed.changeChannel(2); // fails to compile
String s = ed.toString();
Somente possvel usar uma referncia de tipo de interface para fazer referncia a um objeto
que implementa essa interface. Se um objeto tiver todos os mtodos descritos na interface, mas
no implementar a interface, no ser possvel usar a interface como um tipo de referncia desse
objeto. As interfaces incluem implicitamente todos os mtodos de java.lang.Object.
Programao Java SE 7 6 - 7
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Operador instanceof
possvel usar instanceof com interfaces.
Television t = new Television();
if (t instanceof ElectronicDevice) { }
Television uma instncia de um ElectronicDevice.
Implementa
Anteriormente, voc usou instanceof em tipos de classe. Qualquer tipo que possa ser utilizado
como uma referncia pode ser utilizado com um operando do operador instanceof. No slide,
Television implementa ElectronicDevice. Por isso, Television uma instncia de
Television, ElectronicDevice e java.lang.Object.
Programao Java SE 7 6 - 8
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Interfaces Marcadoras
As interfaces marcadoras definem um tipo, mas no
descrevem os mtodos que precisam ser implementados
por uma classe.
public class Person implements java.io.Serializable { }
O nico motivo da existncia desses tipos de interface a
verificao de tipo.
Person p = new Person();
if (p instanceof Serializable) {
}
java.io.Serializable uma interface marcadora utilizada pela biblioteca de E/S do Java
para determinar se possvel serializar o estado de um objeto. Ao implementar Serializable,
no necessrio fornecer implementaes de mtodo. O teste (na forma do operador
instanceof) de seriabilidade de um objeto criado nas biblioteca de E/S padro. Voc usa
essa interface na lio Fundamentos de E/S do Java.
Programao Java SE 7 6 - 9
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Fazendo a Converso em Tipos de Interface
possvel fazer a converso em um tipo de interface.
public static void turnObjectOn(Object o) {
if (o instanceof ElectronicDevice) {
ElectronicDevice e = (ElectronicDevice)o;
e.turnOn();
}
}
Diretrizes de Converso
Da mesma forma que voc faria ao realizar a converso em tipos de classe, se fizer a converso
em um tipo que no seja vlido para esse objeto, a sua aplicao gerar uma exceo e,
provavelmente, falhar. Para verificar se uma converso ter sucesso, voc deve usar um teste
de instanceof.
O exemplo no slide mostra um design inadequado, pois o mtodo turnObjectOn() opera
somente em instncias de ElectronicDevice. O uso de instanceof e de converso
aumenta o overhead no runtime. Quando possvel, use um teste de tempo de compilao
reescrevendo o mtodo da seguinte maneira:
public static void turnObjectOn(ElectronicDevice e) {
e.turnOn();
}
Programao Java SE 7 6 - 10
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Usando Tipos de Referncia Genricos
Use o tipo mais genrico de referncia onde for possvel:
EmployeeDAO dao = new EmployeeDAOMemoryImpl();
dao.delete(1);
Ao usar um tipo de referncia de interface, possvel usar
uma classe de implementao diferente sem correr o risco
de romper linhas de cdigo subsequentes:
EmployeeDAOMemoryImpl dao = new EmployeeDAOMemoryImpl();
dao.delete(1);
possvel que voc esteja usando mtodos somente da
classe EmployeeDAOMemoryImpl aqui.
EmployeeDAOMemoryImpl implementa
EmployeeDAO
Ao criar referncias, necessrio usar o tipo mais genrico possvel. Isso significa que, para o
objeto que voc est instanciando, necessrio declarar a referncia como do tipo interface ou
classe me. Com isso, toda a utilizao da referncia no fica vinculada a uma classe de
implementao especfica e, se voc precisar, poder usar outra classe de implementao. Com
o uso de uma interface que vrias classes implementam como o tipo de referncia, voc tem a
liberdade de alterar a implementao sem afetar o seu cdigo. Uma referncia do tipo
EmployeeDAOMemoryImplpoder ser utilizada para chamar um mtodo que aparece somente
na classe EmployeeDAOMemoryImpl.
As referncias com tipo de um classe especfica tornam a operao do cdigo mais dependente
dessa classe e podem causar maior refatorao do seu cdigo ao alterar implementaes.
Programao Java SE 7 6 - 11
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Implementando e Estendendo
As classes podem estender uma classe me e implementar
uma interface:
public class AmphibiousCar extends BasicCar implements
MotorizedBoat { }
Tambm possvel implementar vrias interfaces:
public class AmphibiousCar extends BasicCar implements
MotorizedBoat, java.io.Serializable { }
Use uma vrgula para separar a
sua lista de interfaces.
Extenses Primeiro
Se voc usar as clusulasextends e implements, as clusulas extends devero vir primeiro.
Programao Java SE 7 6 - 12
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Estendendo Interfaces
As interfaces podem estender outras interfaces:
public interface Boat { }
public interface MotorizedBoat extends Boat { }
Com a implementao de MotorizedBoat, a classe
AmphibiousCar precisa cumprir o contrato descrito por
MotorizedBoat e Boat:
public class AmphibiousCar extends BasicCar implements
MotorizedBoat, java.io.Serializable { }
Programao Java SE 7 6 - 13
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Interfaces em Hierarquias de Herana
Estende Implementa
Heranas de Interface
As interfaces so utilizadas para um tipo de herana conhecido como herana de interface. O
Java permite herana mltipla de interface, mas somente herana nica de classe.
Estendendo uma Classe de Implementao
Se voc escrever uma classe que estenda outra que implementa uma interface, a classe que
voc criou tambm implementar a interface. Por exemplo, AmphibiousCar estende BasicCar.
BasicCar implementa Car. Por isso, AmphibiousCar tambm implementa Car.
Interfaces Estendendo Interfaces
Uma interface pode estender outra interface. Por exemplo, a interface MotorizedBoat pode
estender a interface Boat. Se a classe AmphibiousCar implementar MotorizedBoat, dever
implementar todos os mtodos de Boat e MotorizedBoat.
Mtodos Duplicados
Quando uma classe implementa vrias interfaces, direta ou indiretamente, a mesma assinatura
de mtodo pode aparecer em diversas interfaces implementadas. Se a assinatura for igual, no
haver conflito e ser necessria apenas uma implementao.
Programao Java SE 7 6 - 14
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Quiz
Uma classe pode implementar vrias interfaces.
a. Verdadeiro
b. Falso
Programao Java SE 7 6 - 15
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Padres de Design e Interfaces
Um dos princpios do design orientado a objetos :
Programar para uma interface, no para uma implementao.
Esse um tema comum em muitos padres de design. Esse
princpio tem um papel importante no:
Padro de design DAO
Padro de design factory
Princpios do Design Orientado a Objetos
Programar para uma interface, e no para uma implementao uma prtica que se tornou
popular com o livro Design Patterns: Elements of Reusable Object-Oriented Software.
Aprenda mais sobre os princpios do design orientado a objetos e os padres de design no curso
Java Design Patterns (Padres de Design Java).
Programao Java SE 7 6 - 16
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Padro DAO
O padro DAO (Data Access Object) utilizado na criao de
uma aplicao que precisa tornar informaes persistentes. O
padro DAO:
Separa o domnio do problema do mecanismo de
persistncia
Usa uma interface para definir os mtodos utilizados para
persistncia. Uma interface permite que a implementao
da persistncia seja substituda por:
DAOs baseados em memria como uma soluo temporria
DAOs baseados em arquivo para uma verso inicial
DAOs baseados em JDBC para oferecer suporte
persistncia de banco de dados
DAOs baseados em JAP (Java Persistence API) para
oferecer suporte persistncia de banco de dados
Por Que Separar Cdigo de Negcios e Cdigo de Persistncia?
Alm da funcionalidade necessria de uma aplicao, outras preocupaes tambm influenciam
o design das suas classes. O desejo de ter facilidade de manuteno e capacidade de aprimorar
uma aplicao tambm influencia o design. O cdigo modular que separados por funcionalidade
mais fcil de atualizar e manter.
Com a separao da lgica de negcios e de persistncia, as aplicaes ficam mais fceis de
implementar e manter custa classes e interfaces adicionais. Em geral, esses dois tipos de lgica
tm ciclos de manuteno diferentes. Por exemplo, talvez seja necessrio modificar a lgica de
persistncia se o banco de dados utilizado pela aplicao tiver sido migrado do MySQL para o
Oracle 11g.
Se voc criar interfaces para as classes que contm a lgica de persistncia, ser mais fcil
substituir a sua implementao da persistncia.
Programao Java SE 7 6 - 17
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Antes do Padro DAO
Observe os mtodos de persistncia combinados com os
mtodos de negcios.
Antes do padro DAO
O Princpio da Responsabilidade nica
A classe Employee mostrada no slide tem mtodos que se concentram em dois princpios ou
preocupaes distintas. Um conjunto de mtodos se concentra na manipulao da representao
de uma pessoa, e o outro lida com objetos Employee persistentes. Como esses dois conjuntos
de responsabilidades podem ser modificados em diversos momentos da existncia das suas
aplicaes, faz sentido dividi-los em classes distintas.
Programao Java SE 7 6 - 18
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Depois do Padro DAO
O padro DAO move a lgica de persistncia das classes de
domnio para classes separadas.
Depois da refatorao para o padro DAO
Implementaes DAO
Se voc acha que poder precisar alterar a sua implementao DAO posteriormente para usar
outro mecanismo de persistncia, melhor usar uma interface para definir o contrato que todas
as implementaes DAO precisam cumprir.
As suas interfaces DAO descrevem mtodos para criar, ler, atualizar e deletar dados, embora os
nomes dos mtodos possam variar. Quando voc implementar o padro DAO pela primeira vez,
no ver o benefcio imediatamente. A vantagem aparece posteriormente, quando voc comea a
modificar ou substituir cdigo. Na lio Construindo Aplicaes de Banco de dados com JDBC,
abordamos a substituio do DAO baseado em memria com DAOs habilitados para arquivo e
para banco de dados.
Programao Java SE 7 6 - 19
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
A Necessidade do Padro Factory
O padro DAO depende do uso de interfaces para definir uma
abstrao. O uso de um construtor da implementao DAO
vincula voc a uma implementao especfica.
EmployeeDAO dao = new EmployeeDAOMemoryImpl();
Essa chamada de construtor
vinculada a uma implementao
e aparecer em vrios lugares
em toda a aplicao.
Com o uso de um tipo
de interface, as linhas
subsequentes no so
vinculadas a uma nica
implementao.
Programao Java SE 7 6 - 20
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Usando o Padro Factory
O uso de um mtodo factory impede que a sua aplicao seja
dependente de uma implementao DAO especfica.
EmployeeDAOFactory factory = new EmployeeDAOFactory();
EmployeeDAO dao = factory.createEmployeeDAO();
A implementao
EmployeeDAO ocultada.
Esse padro elimina chamadas diretas de construtor, em favor da chamada de um mtodo. Em
geral, um mtodo factory utilizado na implementao do padro DAO.
No exemplo do slide, voc no tem ideia do tipo de mecanismo de persistncia utilizado por
EmployeeDAO, pois apenas uma interface. O mtodo factory poderia retornar uma
implementao DAO que usa arquivos ou um banco de dados para armazenar e recuperar dados.
Como desenvolvedor, voc deseja saber o tipo de persistncia que est sendo utilizado, pois ele
influencia o desempenho e a confiabilidade da sua aplicao. Mas no deseja que a maior parte
do cdigo que escreve seja dependente do tipo de persistncia.
Programao Java SE 7 6 - 21
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
O Mtodo Factory
A implementao do mtodo factory o nico ponto da
aplicao que deve depender de classes DAO concretas.
public class EmployeeDAOFactory {
public EmployeeDAO createEmployeeDAO() {
return new EmployeeDAOMemoryImpl();
}
}
Retorna uma referncia de
tipo de interface
Por questo de simplicidade, esse mtodo factory define por hard-code o nome de uma classe
concreta a ser instanciada. Voc poderia aprimorar esse mtodo factory inserindo o nome da
classe em uma fonte externa, como um arquivo de texto, e usar a classe java.lang.Class
para instanciar a subclasse concreta. Um exemplo bsico do uso da classe java.lang.Class
o seguinte:
String name = "com.example.dao.EmployeeDAOMemoryImpl";
Class clazz = Class.forName(name);
EmployeDAO dao = (EmployeeDAO)clazz.newInstance();
Programao Java SE 7 6 - 22
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
DAO e Factory Juntos
Clientes que dependem apenas de DAOs abstratos
Programao Java SE 7 6 - 23
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Quiz
Uma implementao singleton tpica contm um mtodo
factory.
a. Verdadeiro
b. Falso
Programao Java SE 7 6 - 24
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Reutilizao de Cdigo
A duplicao de cdigo (cpia e colagem) pode causar
problemas de manuteno. Voc no deseja corrigir o mesmo
erro vrias vezes.
Princpio DRY (Dont repeat yourself!, No se repita)
Reutilize cdigo da forma adequada:
Refatore em bibliotecas as rotinas comumente utilizadas.
Mova para a classe me o comportamento compartilhado
por classes irms.
Crie novas combinaes de comportamentos combinando
vrios tipos de objetos (composio).
O processo de cpia e colagem de cdigo no algo que se deva evitar sempre. Se o cdigo
duplicado funcionar como ponto de partida e sofrer muitas modificaes, essa poder ser uma
situao aceitvel para copiar e colar linhas de cdigo. importante estar ciente do volume de
cpia e colagem que est ocorrendo em um projeto. Alm de realizar auditorias manuais de
cdigo, h ferramentas que voc pode usar para detectar cdigo duplicado. Para obter um
exemplo disso, consulte http://pmd.sourceforge.net/cpd.html.
Programao Java SE 7 6 - 25
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Dificuldades de Design
A herana de classe permite a reutilizao de cdigo, mas no
muito modular.
Como possvel criar SpyCarWithSunRoof?
Implementaes de mtodo localizadas entre diversas classes
Limitaes com Herana
O Java oferece suporte somente herana nica de classe, o que elimina a possibilidade de
herdar diversas implementaes de um mtodo com a mesma assinatura. A herana mltipla de
interface no representa o mesmo problema que a herana de classe, pois no podem existir
implementaes de mtodo conflitantes em interfaces.
Programao Java SE 7 6 - 26
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Composio
A composio de objetos permite criar objetos mais
complexos. Para implementar a composio, voc:
1. Cria uma classe com referncia a outras classes.
2. Adiciona mtodos com a mesma assinatura que so
encaminhados aos objetos referenciados.
Combinando mtodos de vrias classes
por meio de composio
e encaminhamento
composio
Delegao
Delegao e encaminhamento de mtodo so termos que costumam ser utilizados de forma
intercambivel. O encaminhamento de mtodo ocorre quando voc escreve um mtodo que
somente transfere a execuo para outro mtodo. Em alguns casos, a delegao pode implicar
mais do que um simples encaminhamento. Para saber mais sobre a diferena entre os dois
termos, consulte a pgina 20 do livro Design Patterns: Elements of Reusable Object-Oriented
Software.
Programao Java SE 7 6 - 27
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Os Assistentes IDE Facilitam a Implementao da Composio
Para implementar a composio com o NetBeans IDE, use a ferramenta Insert Code da seguinte
maneira:
1. Clique com o boto direito entre as chaves da classe complexa e escolha "Insert Code".
2. Selecione "Delegate Method.
Ser exibida a caixa de dilogo Generate Delegate Methods.
3. Selecione as chamadas de mtodo que voc deseja encaminhar.
Os mtodos so inseridos para voc.
Repita essas etapas para cada classe delegada.
Programao Java SE 7 6 - 28
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Implementao da Composio
public class SpyCarWithSunRoof {
private BasicCar car = new BasicCar();
private SpyCarAddon spyAddon = new SpyCarAddon();
private SunRoofAddon roofAddon = new SunRoofAddon();
public void start() {
car.start();
}
// other forwarded methods
}
Encaminhamento
de mtodo
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Polimorfismo e Composio
O polimorfismo deve nos permitir especificar qualquer tipo
de Car para o mtodo addCar. A composio no permite
polimorfismo, a menos que
Um objeto car complexo que no pode ser
especificado para um mtodo esperando um
objeto car simples
Reutilizao de Cdigo
A capacidade de usar o mtodo addCar para qualquer tipo de Car, por mais complexo que seja,
outra forma de reutilizao de cdigo. No momento, no podemos dizer o seguinte:
addCar(new SpyCarWithSunRoof());
Programao Java SE 7 6 - 29
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Polimorfismo e Composio
Use interfaces para que todas as classes delegadas ofeream
suporte ao polimorfismo.
Composio com interfaces para
oferecer suporte ao polimorfismo
Cada classe delegada que voc usa em uma composio deve ter uma interface definida. Ao
criar a classe de composio, voc declara que ela implementa todos os tipos de interface
delegados.
Com isso, voc cria um objeto que uma composio de outros objetos e tem vrios tipos.
Agora, podemos dizer:
addCar(new SpyCarWithSunRoof());
Programao Java SE 7 6 - 30
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Quiz
A delegao de mtodo necessria para criar objetos
complexos usando:
a. Polimorfismo
b. Composio
Programao Java SE 7 6 - 31
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Resumo
Nesta lio, voc aprendeu a:
Modelar problemas de negcios usando interfaces
Definir uma interface Java
Escolher entre herana de interface e de classe
Estender uma interface
Refatorar o cdigo para implementar o padro DAO
Programao Java SE 7 6 - 32
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Exerccio 6-1 Viso Geral:
Implementando uma Interface
Este exerccio abrange os seguintes tpicos:
Escrevendo uma interface
Implementando uma Interface
Criando referncias de um tipo de interface
Fazendo a converso em tipos de interface
Programao Java SE 7 6 - 33
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Exerccio 6-2 Viso Geral:
Aplicando o Padro DAO
Este exerccio abrange os seguintes tpicos:
Reescrevendo um objeto de domnio existente com uma
implementao de persistncia baseada em memria
usando o padro DAO
Aproveitando um mtodo factory abstrato para evitar a
dependncia de implementaes concretas
Programao Java SE 7 6 - 34
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Exerccio 6-3 (Opcional) Viso Geral:
Implementando a Composio
Este exerccio abrange os seguintes tpicos:
Reescrevendo uma aplicao existente para oferecer
melhor suporte reutilizao de cdigo por meio de
composio
Usando interfaces para permitir o polimorfismo
Programao Java SE 7 6 - 35
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Genricos e Colees
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Objetivos
Aps concluir esta lio, voc ser capaz de:
Criar uma classe genrica personalizada
Usar a inferncia de tipos com o operador diamante para
criar um objeto
Criar uma coleo sem usar genricos
Criar uma coleo usando genricos
Implementar uma ArrayList
Implementar um Set
Implementar um HashMap
Implementar uma pilha usando um deque
Usar tipos enumerados
Programao Java SE 7 7 - 2
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Genricos
Fornecer segurana de tipo flexvel ao cdigo
Mover vrios erros comuns do runtime para o tempo
de compilao
Fornecer um cdigo mais limpo e fcil de gravar
Reduzir a necessidade de transmisso com colees
So usados intensamente na Java Collections API
Programao Java SE 7 7 - 3
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Os dois exemplos no slide mostram classes de cache muito simples. Mesmo que cada classe
seja muito simples, uma classe separada necessria para qualquer tipo de objeto.
Programao Java SE 7 7 - 4
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Classe de Cache Simples sem Genricos
public class CacheString {
private String message = "";
public void add(String message){
this.message = message;
}
public String get(){
return this.message;
}
}
public class CacheShirt {
private Shirt shirt;
public void add(Shirt shirt){
this.shirt = shirt;
}
public Shirt get(){
return this.shirt;
}
}
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Classe de Cache Genrica
1 public class CacheAny <T>{
2
3 private T t;
4
5 public void add(T t){
6 this.t = t;
7 }
8
9 public T get(){
10 return this.t;
11 }
12 }
Para criar uma verso genrica da classe CacheAny, uma varivel chamada T adicionada
definio de classe entre parnteses angulares. Nesse caso, o T significa type e pode
representar qualquer tipo. Como mostra o exemplo, o cdigo foi alterado para usar t, em vez de
informaes de tipo especficas. Essa alterao permite que a classe CacheAny armazene
qualquer tipo de objeto.
O T foi escolhido por conveno, e no aleatoriamente. Diversas letras so geralmente usadas
com os genricos.
Observao: possvel usar qualquer identificador que voc desejar. Os valores a seguir so
meras sugestes.
Estas so as convenes:
T: Type (Tipo)
E: Element (Elemento)
K: Key (Chave)
V: Value (Valor)
S, U: Letras usadas se houver tipos secundrios, tercirios ou mais
Programao Java SE 7 7 - 5
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Genricos em Ao
Compare os objetos restritos a tipo com suas alternativas
genricas.
1 public static void main(String args[]){
2 CacheString myMessage = new CacheString(); // Type
3 CacheShirt myShirt = new CacheShirt(); // Type
4
5 //Generics
6 CacheAny<String> myGenericMessage = new CacheAny<String>();
7 CacheAny<Shirt> myGenericShirt = new CacheAny<Shirt>();
8
9 myMessage.add("Save this for me"); // Type
10 myGenericMessage.add("Save this for me"); // Generic
11
12 }
Observe como a verso genrica da classe pode substituir qualquer quantidade de classes de
cache especficas de tipo. As funes add() e get() funcionam exatamente da mesma
maneira. De fato, se a declarao myMessage for alterada para genrica, nenhuma alterao
precisar ser feita no cdigo restante.
O cdigo de exemplo pode ser encontrado no projeto Generics do arquivo
TestCacheAny.java.
Programao Java SE 7 7 - 6
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Genricos com Inferncia de Tipos
(Operador Diamante)
Sintaxe
No necessrio repetir os tipos direita da instruo.
Os colchetes angulares indicam que os parmetros de tipo
esto espelhados.
Simplifica declaraes genricas
Salva a digitao
//Generics
CacheAny<String> myMessage = new CacheAny<>();
}
A inferncia de tipos com o operador diamante um novo recurso do JDK 7. No cdigo genrico,
observe como a
definio de tipo direita sempre equivalente definio de tipo esquerda. No JDK 7,
possvel usar o operador diamante para indicar que a definio de tipo direita equivalente da
esquerda. Isso ajuda a evitar a digitao de informaes redundantes repetidas vezes.
Exemplo: TestCacheAnyDiamond.java
Observao: De certa forma, ele a forma oposta de uma designao de tipo Java normal. Por
exemplo,
Employee emp = new Manager(); torna emp o objeto de uma instncia de Manager.
Mas, no caso dos genricos:
ArrayList<Manager> managementTeam = new ArrayList<>();
o lado esquerdo da expresso (e no o lado direito) que determina o tipo.
Programao Java SE 7 7 - 7
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Quiz
Qual das alternativas a seguir no uma abreviao
convencional para uso com genricos?
a. T: Table (Tabela)
b. E: Element (Elemento)
c. K: Key (Chave)
d. V: Value (Valor)
Programao Java SE 7 7 - 8
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Colees
Uma coleo um objeto projetado para gerenciar um
grupo de objetos.
Os objetos de uma coleo so denominados elementos
.Primitivas no so permitidas em uma coleo.
Vrios tipos de coleo implementam vrias estruturas
de dados comuns:
Pilha, filha, array dinmico, hash
A Collections API baseia-se
principalmente nos genricos para
sua implementao.
Uma coleo um objeto que gerencia um grupo de objetos. Os objetos da coleo so
denominados elementos. Vrios tipos de coleo implementam estruturas de dados padro,
incluindo pilhas, filas, arrays dinmicos e hashes. Todos os objetos de coleo foram otimizados
para serem usados em aplicaes Java.
Observao: As classes Collections so armazenadas no pacote java.util. As instrues
import no so mostradas nos exemplos a seguir, mas as instrues import so necessrias
em cada tipo de coleo:
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
Programao Java SE 7 7 - 9
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Tipos de Coleo
O diagrama no slide mostra todos os tipos de coleo abaixo de Collection. Alguns mtodos
de amostra so fornecidos para Collection e List. Observe o uso dos genricos.
Caractersticas das Classes de Implementao
HashSet: Uma coleo de elementos que no contm elementos duplicados
TreeSet: Uma coleo classificado de elementos que no contm elementos duplicados
ArrayList: Uma implementao de array dinmico
Deque: Uma coleo que pode ser usada para implementar uma pilha ou fila
Observao: A interface Map uma rvore de herana separada, que ser abordada
posteriormente na lio.
Programao Java SE 7 7 - 10
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Interface List
List uma interface que define o comportamento da lista
genrica.
Uma coleo ordenada de elementos
Os comportamentos de List incluem:
Adio de elementos em um ndice especfico
Adio de elementos ao fim da lista
Obteno de um elemento com base em um ndice
Remoo de um elemento com base em um ndice
Substituio de um elemento com base em um ndice
Obteno do tamanho da lista
Use List como um objeto de instncia para ocultar os
detalhes da implementao.
A interface List a base de todas as classes Collections que exibem o comportamento da lista.
Programao Java SE 7 7 - 11
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Classe de Implementao ArrayList
um array que cresce dinamicamente
A lista crescer automaticamente se os elementos
excederem o tamanho inicial.
Tem um ndice numrico
Os elementos so acessados pelo ndice.
Os elementos podem ser inseridos com base no ndice.
Os elementos podem ser substitudos.
Permite itens duplicados
Uma ArrayList implementa uma coleo List. A implementao exibe caractersticas de um
array que cresce dinamicamente. Uma aplicao de lista de tarefas um bom exemplo de
aplicao que pode se beneficiar com uma ArrayList.
Programao Java SE 7 7 - 12
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
ArrayList Sem Genricos
1 public class OldStyleArrayList {
2 public static void main(String args[]){
3 List partList = new ArrayList(3);
4
5 partList.add(new Integer(1111));
6 partList.add(new Integer(2222));
7 partList.add(new Integer(3333));
8 partList.add("Oops a string!");
9
10 Iterator elements = partList.iterator();
11 while (elements.hasNext()) {
12 Integer partNumberObject = (Integer) (elements.next()); // error?
13 int partNumber = (int) partNumberObject.intValue();
14
15 System.out.println("Part number: " + partNumber);
16 }
17 }
18 }
No exemplo do slide, uma lista de nmeros de pea criada por meio de uma ArrayList. A
sintaxe anterior ao Java 1.5 no usa nenhum tipo de definio. Portanto, nenhum tipo pode ser
adicionado lista, conforme mostrado na linha 8. responsabilidade do programador saber quais
objetos constam na lista e em que ordem. Se for feita uma suposio de que a lista destina-se
somente a objetos Integer, um erro de runtime ocorrer na linha 12.
Nas linhas 10 a 16, com uma coleo no genrica, um Iterator usado para fazer a iterao
na lista de itens. Observe que necessrio fazer vrias converses para que os objetos sejam
retirados novamente da lista e voc possa imprimir os dados.
No final, haver uma grande quantidade de acar sinttico (cdigo extra) desnecessrio
trabalhando com as colees dessa maneira.
Se a linha que adiciona a String ArrayList for comentada, o programa gerar a seguinte
sada:
Part number: 1111
Part number: 2222
Part number: 3333
Programao Java SE 7 7 - 13
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
ArrayList Genrica
1 import java.util.ArrayList;
2 import java.util.List;
3
4 public class GenericArrayList {
5 public static void main(String args[]){
6
7 List<Integer> partList = new ArrayList<>(3);
8
9 partList.add(new Integer(1111));
10 partList.add(new Integer(2222));
11 partList.add(new Integer(3333));
12 partList.add(new Integer(4444)); // ArrayList auto grows
13
14 System.out.println("First Part: " + partList.get(0)); // First item
15 partList.add(0, new Integer(5555)); // Insert an item by index
16
17 // partList.add("Bad Data"); // compile error now
Com os genricos, tudo muito mais simples. Quando a ArrayList for inicializada na linha 6,
qualquer tentativa de adicionar um valor invlido (linha 15) resultar em um erro de tempo de
compilao.
O exemplo do slide mostra diversos recursos de ArrayList.
A linha 12 demonstra como uma ArrayList cresce automaticamente quando um item fica
maior que seu tamanho original.
A linha 14 mostra como os elementos podem ser acessados pelo seu ndice.
A linha 15 mostra como os elementos podem ser inseridos na lista com base em seu ndice.
Observao: Na linha 7, a ArrayList atribuda a um tipo de List. O uso desse estilo permite
que voc remova a implementao de List sem alterar outro cdigo.
Programao Java SE 7 7 - 14
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
ArrayList Genrica: Iterao e Boxing
O loop for aprimorado, ou loop for-each, fornece um
cdigo mais limpo.
Nenhuma converso feita devido aos recursos
autoboxing e unboxing.
for (Integer partNumberObj:partList){
int partNumber = partNumberObj; // Demos auto unboxing
System.out.println("Part number: " + partNumber);
}
O uso do loop for-each muito mais fcil e fornece um cdigo mais limpo. Nenhuma converso
ser feita devido ao recurso autounboxing do Java.
Programao Java SE 7 7 - 15
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Autoboxing e Unboxing
Simplifica a sintaxe
Gera um cdigo mais limpo e fcil de ler
1 public class AutoBox {
2 public static void main(String[] args){
3 Integer intObject = new Integer(1);
4 int intPrimitive = 2;
5
6 Integer tempInteger;
7 int tempPrimitive;
8
9 tempInteger = new Integer(intPrimitive);
10 tempPrimitive = (int) intObject.intValue();
11
12 tempInteger = intPrimitive; // Auto box
13 tempPrimitive = intObject; // Auto unbox
As linhas 9 e 10 mostram um mtodo tradicional de movimentao entre objetos e primitivas. As
linhas 12 e 13 mostram os recursos boxing e unboxing.
Autoboxing e Unboxing
Os recursos autoboxing e unboxing so recursos de linguagem Java que permitem fazer
atribuies sensveis sem sintaxe de converso formal. A Java fornece as converses no tempo
de compilao.
Observao: Tenha cuidado ao usar o recurso autoboxing em um loop. Existe um custo de
desempenho pelo uso desse recurso.
Programao Java SE 7 7 - 16
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Quiz
Qual das alternativas a seguir declara um Integer
ArrayList com trs elementos?
a. List<Integer> partList = new ArrayList<>(three);
b. List<Integer> partList = new ArrayList<>[3];
c. List<Integer> partList = new ArrayList<>(three);
d. List<Integer> partList = new ArrayList<>(3);
Programao Java SE 7 7 - 17
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Interface Set
Um conjunto uma lista que contm somente elementos
exclusivos.
Um conjunto no tem ndice.
Elementos duplicados no so permitidos em um conjunto.
possvel fazer a iterao nos elementos para acess-los.
TreeSet fornece implementao classificada.
Como exemplo, um conjunto pode ser usado para rastrear uma lista de nmeros de pea
exclusivos.
Programao Java SE 7 7 - 18
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Interface Set: Exemplo
Um conjunto uma coleo de elementos exclusivos.
1 public class SetExample {
2 public static void main(String[] args){
3 Set<String> set = new TreeSet<>();
4
5 set.add("one");
6 set.add("two");
7 set.add("three");
8 set.add("three"); // not added, only unique
9
10 for (String item:set){
11 System.out.println("Item: " + item);
12 }
13 }
14 }
Um conjunto uma coleo de elementos exclusivos. Este exemplo usa um TreeSet,
que classifica os itens no conjunto. Se o programa for executado, a sada ser a seguinte:
Item: one
Item: three
Item: two
Programao Java SE 7 7 - 19
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Interface Map
Uma coleo que armazena vrios pares de chave/valor
Chave: Identificador exclusivo para cada elemento em uma
coleo
Valor: Um valor armazenado no elemento associado chave
Denominado arrays associativos em outras linguagens
Chave Valor
101 Blue Shirt
102 Black Shirt
103 Gray Shirt
Um Map recomendvel para rastrear itens como listas de peas e suas descries (conforme
mostrado no slide).
Programao Java SE 7 7 - 20
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Tipos Map
A interface Map no estende a interface Collection porque representa mapeamentos, e no
uma coleo de objetos. Estas so algumas classes de implementao de chave:
TreeMap: Um mapa no qual as chaves so classificadas automaticamente
HashTable: Uma implementao clssica de array associativo com chaves e valores.
HashTable sincronizada.
HashMap: Uma implementao semelhante HashTable; a nica diferena que ela
aceita chaves e valores nulos. Alm disso, ela no sincronizada.
Programao Java SE 7 7 - 21
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Interface Map: Exemplo
1 public class MapExample {
2 public static void main(String[] args){
3 Map <String, String> partList = new TreeMap<>();
4 partList.put(S001", "Blue Polo Shirt");
5 partList.put(S002", "Black Polo Shirt");
6 partList.put(H001", "Duke Hat");
7
8 partList.put(S002", "Black T-Shirt"); // Overwrite value
9 Set<String> keys = partList.keySet();
10
11 System.out.println("=== Part List ===");
12 for (String key:keys){
13 System.out.println("Part#: " + key + " " +
partList.get(key));
14 }
15 }
16 }
O exemplo mostra como criar um Map e executar operaes padro nele. A sada gerada pelo
programa :
=== Part List ===
Part#: 111111 Blue Polo Shirt
Part#: 222222 Black T-Shirt
Part#: 333333 Duke Hat
Programao Java SE 7 7 - 22
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Interface Deque
Uma coleo que pode ser usada como uma pilha ou uma fila
Significa double-ended queue (e se pronuncia deck)
Um fila permite operaes FIFO (primeiro a entrar,
primeiro a sair)
Mtodos add(e) e remove()
Uma pilha permite operaes LIFO (ltimo a entrar,
primeiro a sair)
Mtodos push(e) e pop()
Deque uma interface filho de Collection (exatamente como Set e List).
Uma fila geralmente usada para rastrear solicitaes de mensagens assncronas; portanto, elas
podem ser processadas na ordem. Uma pilha pode ser muito til para atravessar uma rvore de
diretrios ou estruturas similares.
Programao Java SE 7 7 - 23
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Pilha com Deque: Exemplo
1 public class TestStack {
2 public static void main(String[] args){
3 Deque<String> stack = new ArrayDeque<>();
4 stack.push("one");
5 stack.push("two");
6 stack.push("three");
7
8 int size = stack.size() - 1;
9 while (size >= 0 ) {
10 System.out.println(stack.pop());
11 size--;
12 }
13 }
14 }
Um deque (se pronuncia deck) uma doubled-ended queue. Basicamente, isso significa que
um deque pode ser usado como fila (operaes primeiro a entrar, primeiro a sair [FIFO]) ou como
pilha (operaes ltimo a entrar,
primeiro a sair [LIFO]).
Programao Java SE 7 7 - 24
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Ordenando Colees
As interfaces Comparable e Comparator so usadas
para classificar colees.
Ambas so implementadas usando genricos.
Com a interface Comparable:
Substitui o mtodo compareTo
Fornece somente uma opo de classificao
Com a interface Comparator:
implementada por meio do mtodo compare
Permite criar vrias classes Comparator
Permite criar e usar diversas opes de classificao
A Collections API fornece duas interfaces para ordenao de elementos: Comparable e
Comparator.
A interface Comparable implementada em uma classe e fornece uma nica opo de
classificao para a classe.
A interface Comparator permite criar vrias opes de classificao. Voc conecta a opo
designada quando desejar.
As duas interfaces podem ser usadas com colees classificadas, como TreeSet e TreeMap.
Programao Java SE 7 7 - 25
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
O slide mostra como a classe ComparableStudent se relacionada com a interface
Comparable e o TreeSet.
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Interface Comparable
Com a interface Comparable:
Substitui o mtodo compareTo
Fornece somente uma opo de classificao
Programao Java SE 7 7 - 26
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Comparable: Exemplo
1 public class ComparableStudent implements Comparable<ComparableStudent>{
2 private String name; private long id = 0; private double gpa = 0.0;
3
4 public ComparableStudent(String name, long id, double gpa){
5 // Additional code here
6 }
7 public String getName(){ return this.name; }
8 // Additional code here
9
10 public int compareTo(ComparableStudent s){
11 int result = this.name.compareTo(s.getName());
12 if (result > 0) { return 1; }
13 else if (result < 0){ return -1; }
14 else { return 0; }
15 }
16 }
Esse exemplo do slide implementa a interface Comparable e seu mtodo compareTo. Observe
que, como a interface projetada usando genricos, os parnteses angulares definem o tipo de
classe que passado para o mtodo compareTo. As instrues if so includas para
demonstrar as comparaes efetuadas. Voc tambm pode retornar meramente um resultado.
Os nmeros retornados tm o seguinte significado.
Nmero negativo: s vem antes do elemento atual.
Nmero positivo: s vem depois do elemento atual.
Zero: s igual ao elemento atual.
Em casos nos quais a coleo contm valores equivalentes, substitua o cdigo que retorna zero
pelo cdigo adicional que retorna um nmero negativo ou positivo.
Programao Java SE 7 7 - 27
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Teste de Comparable: Exemplo
1 public class TestComparable {
2 public static void main(String[] args){
3 Set<ComparableStudent> studentList = new TreeSet<>();
4
5 studentList.add(new ComparableStudent("Thomas Jefferson", 1111,
3.8));
6 studentList.add(new ComparableStudent("John Adams", 2222, 3.9));
7 studentList.add(new ComparableStudent("George Washington", 3333,
3.4));
8
9 for(ComparableStudent student:studentList){
10 System.out.println(student);
11 }
12 }
13 }
No exemplo do slide, uma ArrayList de elementos ComparableStudent criada. Depois que
a lista inicializada, ela classificada por meio da interface Comparable. A sada do programa
a seguinte:
Name: George Washington ID: 3333 GPA:3.4
Name: John Adams ID: 2222 GPA:3,9
Name: Thomas Jefferson ID: 1111 GPA:3,8
Observao: A classe ComparableStudent substituiu o mtodo toString().
Programao Java SE 7 7 - 28
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Interface Comparator
Com a interface Comparator:
implementada por meio do mtodo compare
Permite criar vrias classes Comparator
Permite criar e usar diversas opes de classificao
O slide mostra duas classes Comparator que podem ser usadas com a classe Student. O
exemplo do prximo slide mostra como usar Comparator com uma interface no classificada
como ArrayList usando a classe de utilitrio Collections.
Programao Java SE 7 7 - 29
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Comparator: Exemplo
public class StudentSortName implements Comparator<Student>{
public int compare(Student s1, Student s2){
int result = s1.getName().compareTo(s2.getName());
if (result != 0) { return result; }
else {
return 0; // Or do more comparing
}
}
}
public class StudentSortGpa implements Comparator<Student>{
public int compare(Student s1, Student s2){
if (s1.getGpa() < s2.getGpa()) { return 1; }
else if (s1.getGpa() > s2.getGpa()) { return -1; }
else { return 0; }
}
}
O exemplo no slide mostra as classes Comparator que so criadas para realizar a classificao
com base em Nome e GPA. Para a comparao de nomes, as instrues if foram simplificadas.
Programao Java SE 7 7 - 30
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Teste de Comparator: Exemplo
1 public class TestComparator {
2 public static void main(String[] args){
3 List<Student> studentList = new ArrayList<>(3);
4 Comparator<Student> sortName = new StudentSortName();
5 Comparator<Student> sortGpa = new StudentSortGpa();
6
7 // Initialize list here
8
9 Collections.sort(studentList, sortName);
10 for(Student student:studentList){
11 System.out.println(student);
12 }
13
14 Collections.sort(studentList, sortGpa);
15 for(Student student:studentList){
16 System.out.println(student);
17 }
18 }
19 }
O exemplo do slide mostra como os dois objetos Comparator so usados com uma coleo.
Observao: Uma parte do cdigo foi comentada para economizar espao.
Observe como os objetos Comparator so inicializados nas linhas 4 e 5. Depois que as
variveis sortName e sortGpa so criadas, elas podem ser passadas para o mtodo sort()
por nome. A execuo do programa produz a seguinte sada.
Name: George Washington ID: 3333 GPA:3.4
Name: John Adams ID: 2222 GPA:3,9
Name: Thomas Jefferson ID: 1111 GPA:3,8
Name: John Adams ID: 2222 GPA:3,9
Name: Thomas Jefferson ID: 1111 GPA:3,8
Name: George Washington ID: 3333 GPA:3.4
Notas
A classe de utilitrio Collections fornece um diversos mtodos teis para vrias
colees. Os mtodos incluem min(), max(), copy() e sort().
A classe Student substituiu o mtodo toString().
Programao Java SE 7 7 - 31
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Quiz
Qual interface deve ser usada para criar vrias opes de
classificao para uma coleo?
a. Comparable
b. Comparison
c. Comparator
d. Comparinator
Programao Java SE 7 7 - 32
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Resumo
Nesta lio, voc aprendeu a:
Criar uma classe genrica personalizada
Usar a inferncia de tipos com o operador diamante para
criar um objeto
Criar uma coleo sem usar genricos
Criar uma coleo usando genricos
Implementar uma ArrayList
Implementar um Set
Implementar um HashMap
Implementar uma pilha usando um deque
Usar tipos enumerados
Programao Java SE 7 7 - 33
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Exerccio 7-1 - Viso Geral:
Contando Nmeros de Pea por Meio de um HashMap
Este exerccio aborda os seguintes tpicos:
Criao de um mapa para armazenar um nmero de pea
e uma contagem
Criao de um mapa para armazenar um nmero de pea
e uma descrio
Processamento da lista de peas e produo de um
relatrio
Programao Java SE 7 7 - 34
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Exerccio 7-2 - Viso Geral:
Fazendo a Correspondncia de Parnteses
Usando um Deque
Este exerccio aborda o processamento de instrues de
programao para garantir que o nmero de parnteses seja
correspondente.
Programao Java SE 7 7 - 35
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Exerccio 7-3 - Viso Geral:
Contando Estoque e Classificando com Comparators
Este exerccio aborda o processamento de transaes de
estoque que geram dois relatrios classificados de forma
diferente por meio de Comparators.
Programao Java SE 7 7 - 36
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Processamento de String
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Objetivos
Aps concluir esta lio, voc ser capaz de:
Ler dados na linha de comando
Pesquisar strings
Analisar strings
Criar strings usando um StringBuilder
Pesquisar strings usando expresses regulares
Analisar strings usando expresses regulares
Substituir strings usando expresses regulares
Programao Java SE 7 8 - 2
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Argumentos de Linha de Comando
Qualquer aplicao de tecnologia Java pode usar
argumentos de linha-de comando.
Esses argumentos de string so colocados na linha de
comando para iniciar o interpretador Java depois do nome
da classe:
java TestArgs arg1 arg2 "another arg"
Cada argumento de linha de comando colocado na
matriz args que passada para o mtodo main esttico:
public static void main(String[] args)
Quando um programa Java iniciado em uma janela de terminal, voc pode fornecer ao
programa zero ou mais argumentos de linha de comando.
Esses argumentos de linha de comando permitem que o usurio especifique as informaes de
configurao da aplicao. Esses argumentos so strings: tokens standalone (como arg1) ou
strings entre aspas (como "another arg").
Programao Java SE 7 8 - 3
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Argumentos de Linha de Comando
public class TestArgs {
public static void main(String[] args){
for ( int i = 0; i < args.length; i++ ) {
System.out.println("args[" + i + "] is '" +
args[i] + "'");
}
}
}
Exemplo de execuo:
java TestArgs "Ted Baxter" 45 100.25
args[0] is 'Ted Baxter'
args[1] is '45'
args[2] is '100,25'
Os argumentos de linha de comando sempre so passados para o mtodo main como strings,
independentemente do tipo pretendido. Se uma aplicao exigir argumentos de linha de comando
que no sejam do tipo String, por exemplo, valores numricos, a aplicao dever converter os
argumentos de string em seus respectivos tipos usando as classes de ajustadores, como o
mtodo Integer.parseInt, que pode ser usado para converter o argumento de string que
representa o inteiro numrico em tipo int.
Programao Java SE 7 8 - 4
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Propriedades
A classe java.util.Properties usada para
carregar e salvar pares de chave/valor em Java.
Podem ser armazenadas em um arquivo de texto simples:
hostName = www.example.com
userName = user
password = pass
O nome do arquivo termina em .properties.
O arquivo pode estar em qualquer lugar que
o compilador o encontrar.
O benefcio de um arquivo de propriedades a capacidade de definir valores para aplicao
externamente. O arquivo de propriedades geralmente lido na inicializao da aplicao e usado
em valores padro. Mas o arquivo de propriedades tambm pode ser parte integrante de um
esquema de localizao, no qual voc armazena os valores dos labels de menu e texto para
vrios idiomas que a aplicao talvez suporte.
A conveno para um arquivo de propriedades <nomedoarquivo>.properties, mas o
arquivo pode ter a extenso que voc desejar. O arquivo pode estar em qualquer lugar; a
aplicao conseguir encontr-lo.
Programao Java SE 7 8 - 5
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Carregando e Usando um Arquivo de Propriedades
1 public static void main (String[] args) {
2 Properties myProps = new Properties();
3 try {
4 FileInputStream fis = new FileInputStream("ServerInfo.properties");
5 myProps.load(fis);
6 } catch (IOException e) {
7 System.out.println("Error: " + e.getMessage());
8 }
9
10 // Print Values
11 System.out.println("Server: " + myProps.getProperty("hostName"));
12 System.out.println("User: " + myProps.getProperty("userName"));
13 System.out.println("Password: " + myProps.getProperty("password"));
14 }
No fragmento de cdigo, voc cria um objeto Properties. Em seguida, usando uma instruo
try, voc abre um arquivo referente aos arquivos de origem do projeto NetBeans. Quando ele
carregado, os pares de nome/valor so disponibilizados para uso na aplicao.
Os arquivos de propriedades permitem que voc injete facilmente configuraes ou outros dados
de aplicao na aplicao.
Programao Java SE 7 8 - 6
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Carregando Propriedades a Partir
da Linha de Comando
As informaes da propriedade tambm podem ser
passadas na linha de comando.
Use a opo D para passar os pares de chave/valor:
java Dpropertyname=value Dpropertyname=value myApp
Por exemplo, passe um dos valores anteriores:
java Dusername=user myApp
Obtenha dos dados de Properties no objeto System:
String userName = System.getProperty("username");
As informaes da propriedade tambm podem ser passadas na linha de comando. A vantagem
de passar propriedades na linha de comando a simplicidade. No necessrio abrir um arquivo
para l-lo. No entanto, se voc tiver poucos parmetros, prefervel usar um arquivo de
propriedades.
Programao Java SE 7 8 - 7
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
PrintWriter e a Console
Se voc est cansado de usar System.out.println() para
imprimir texto na console, h uma alternativa.
import java.io.PrintWriter;
public class PrintWriterExample {
public static void main(String[] args){
PrintWriter pw = new PrintWriter(System.out, true);
pw.println("This is some output.");
}
}
Se voc no deseja digitar System.out.whatever vrias vezes, use PrintWriter para
diminuir o esforo de digitao. O exemplo no slide mostra como criar o objeto. A opo true
necessria para forar PrintWriter a esvaziar cada linha impressa na console.
Programao Java SE 7 8 - 8
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Formato printf
A linguagem Java permite que as strings sejam formatadas
de vrias maneiras:
printf e String.format
public class PrintfExample {
public static void main(String[] args){
PrintWriter pw = new PrintWriter(System.out, true);
double price = 24.99; int quantity = 2; String color = "Blue";
System.out.printf("We have %03d %s Polo shirts that cost
$%3.2f.\n", quantity, color, price);
System.out.format("We have %03d %s Polo shirts that cost
$%3.2f.\n", quantity, color, price);
String out = String.format("We have %03d %s Polo shirts that cost
$%3.2f.", quantity, color, price);
System.out.println(out);
pw.printf("We have %03d %s Polo shirts that cost $%3.2f.\n",
quantity, color, price);
}
}
Execute o formato printf usando a classe String e qualquer fluxo de sada. O slide mostra
vrios exemplos diferentes de formatao de string. Consulte a documentao da Java API para
obter informaes detalhadas sobre todas as opes.
%s: String
%d: Decimal
%f: Flutuante
A sada do programa a seguinte:
We have 002 Blue Polo shirts that cost $24.99.
We have 002 Blue Polo shirts that cost $24.99.
We have 002 Blue Polo shirts that cost $24.99.
We have 002 Blue Polo shirts that cost $24.99.
Programao Java SE 7 8 - 9
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Quiz
Qual das duas alternativas a seguir so instrues de
impresso com formato vlido?
a. System.out.printf("%s Polo shirts cost
$%3.2f.\n", "Red", "35.00");
b. System.out.format("%s Polo shirts cost
$%3.2f.\n", "Red", "35.00");
c. System.out.println("Red Polo shirts cost
$35.00.\n");
d. System.out.print("Red Polo shirts cost
$35.00.\n");
Programao Java SE 7 8 - 10
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Processamento de String
StringBuilder para construo da string
Mtodos de string incorporados
Pesquisa
Anlise
Extrao de substring
Anlise com StringTokenizer
A primeira parte desta seo abrange funes de string que no so expresses regulares.
Quando voc executa manipulaes de string simples, h diversos mtodos incorporados muito
teis.
Programao Java SE 7 8 - 11
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
StringBuilder e StringBuffer
StringBuilder e StringBuffer so as ferramentas
preferenciais quando a concatenao de string no trivial.
Mais eficiente do que +
Simultaneidade
StringBuilder (thread no seguro)
StringBuffer (thread seguro)
Defina a capacidade para o tamanho necessrio.
O redimensionamento constante do buffer tambm pode
resultar em problemas de desempenho.
As classes StringBuilder e StringBuffer so o modo preferencial de concatenao de
strings.
Programao Java SE 7 8 - 12
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Programao Java SE 7 8 - 13
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
StringBuilder: Exemplo
public class StringBuilding {
public static void main(String[] args){
StringBuilder sb = new StringBuilder(500);
sb.append(", the lightning flashed and the thunder
rumbled.\n");
sb.insert(0, "It was a dark and stormy night");
sb.append("The lightning struck...\n").append("[ ");
for(int i = 1; i < 11; i++){
sb.append(i).append(" ");
}
sb.append("] times");
System.out.println(sb.toString());
}
}
O exemplo deste slide mostra alguns mtodos StringBuilder comuns. Use StringBuilder
para inserir texto na posio. O encadeamentos das chamadas de anexao prtica
recomendada para a construo de strings.
A sada do programa a seguinte:
It was a dark and stormy night, the lightning flashed and the thunder
rumbled.
The lightning struck...
[ 1 2 3 4 5 6 7 8 9 10 ] times
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Amostra de Mtodos de String
1 public class StringMethodsExample {
2 public static void main(String[] args){
3 PrintWriter pw = new PrintWriter(System.out, true);
4 String tc01 = "It was the best of times";
5 String tc02 = "It was the worst of times";
6
7 if (tc01.equals(tc02)){
8 pw.println("Strings match..."); }
9 if (tc01.contains("It was")){
10 pw.println("It was found"); }
11 String temp = tc02.replace("w", "zw");
12 pw.println(temp);
13 pw.println(tc02.substring(5, 12));
14 }
15 }
O cdigo no slide demonstra alguns mtodos de string mais teis da classe String.
equals(): Testa a igualdade do contedo de duas strings. Esse mtodo preferencial a
==, que testa se dois objetos apontam para a mesma referncia.
contains(): Pesquisa uma string para verificar se ela contm a string fornecida
replace(): Procura a string fornecida e substitui todas as instncia pela string de destino
fornecida. Existe um mtodo replaceFirst() para substituir somente a primeira
instncia.
substring(): Retorna uma string com base em sua posio na string
A execuo dos programas no slide retornar a seguinte sada:
It was found
It zwas the zworst of times
s the w
Programao Java SE 7 8 - 14
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Usando o Mtodo split()
1 public class StringSplit {
2 public static void main(String[] args){
3 String shirts = "Blue Shirt, Red Shirt, Black
Shirt, Maroon Shirt";
4
5 String[] results = shirts.split(", ");
6 for(String shirtStr:results){
7 System.out.println(shirtStr);
8 }
9 }
10 }
A maneira mais simples de analisar uma string por meio do mtodo split(). Chame o mtodo
com o caractere (ou os caracteres) que dividir a string. O resultado capturado em uma matriz.
Observao: O delimitador pode ser definido por meio de expresses regulares.
A sada do programa no slide a seguinte:
Blue Shirt
Red Shirt
Black Shirt
Maroon Shirt
Programao Java SE 7 8 - 15
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Analisando com StringTokenizer
1 public class StringTokenizerExample {
2 public static void main(String[] args){
3 String shirts = "Blue Shirt, Red Shirt, Black Shirt, Maroon
Shirt";
4
5 StringTokenizer st = new StringTokenizer(shirts, ", ");
6
7 while(st.hasMoreTokens()){
8 System.out.println(st.nextToken());
9 }
10 }
11 }
A classe StringTokenizer exerce a mesma funo de split() ,mas adota uma abordagem
diferente. Voc deve iterar os tokens para obter acesso a eles. Observe tambm que o
delimitador ", " , nesse caso, representa o uso de vrgulas e espaos como delimitadores.
Desse modo, o resultado da anlise o seguinte:
Blue
Shirt
Red
Shirt
Black
Shirt
Maroon
Shirt
Programao Java SE 7 8 - 16
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Scanner
A Scanner pode inserir tokens em uma string ou em um fluxo.
1 public static void main (String[] args) {
2 Scanner s = null;
3 StringBuilder sb = new StringBuilder(64);
4 String line01 = "1.1, 2.2, 3.3";
5 float fsum = 0.0f;
6
7 s = new Scanner(line01).useDelimiter(", ");
8 try {
9 while (s.hasNextFloat()) {
10 float f = s.nextFloat();
11 fsum += f;
12 sb.append(f).append(" ");
13 }
14 System.out.println("Values found: " + sb.toString());
15 System.out.println("FSum: " + fsum);
16 } catch (Exception e) {
17 System.out.println(e.getMessage());
18 }
A Scanner pode ser usada para inserir tokens em um fluxo de entrada ou uma string. Alm
disso, uma Scanner pode ser usada para inserir tokens em nmeros e convert-los em qualquer
tipo de nmero primitivo. Observe como a Scanner definida na linha 7. O objeto resultante
pode ser iterado com base em um tipo especfico. Nesse caso, um float usado.
A sada desse segmento de cdigo a seguinte:
Values found: 1.1 2.2 3.3
FSum: 6.6000004
Programao Java SE 7 8 - 17
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Expresses Regulares
Uma linguagem para fazer a correspondncia de strings
de texto
Vocabulrio muito detalhado
Pesquisar, extrair, ou pesquisar e substituir
Com a Java, a barra invertida (\) no nada agradvel.
Objetos Java
Pattern
Matcher
PatternSyntaxException
java.util.regex
Programao Java SE 7 8 - 18
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Pattern e Matcher
Pattern: Define uma expresso regular
Matcher: Especifica uma string a ser pesquisada
1 import java.util.regex.Matcher;
2 import java.util.regex.Pattern;
3
4 public class PatternExample {
5 public static void main(String[] args){
6 String t = "It was the best of times";
7
8 Pattern pattern = Pattern.compile("the");
9 Matcher matcher = pattern.matcher(t);
10
11 if (matcher.find()) { System.out.println("Found match!"); }
12 }
13 }
Os objetos Pattern e Matcher trabalham em conjunto para fornecer uma soluo completa.
O objeto Pattern define a expresso regular que ser usada na pesquisa. Como mostrado no
exemplo, uma expresso regular pode ser to simples quanto uma palavra ou frase.
O objeto Matcher usado para selecionar a string de destino a ser pesquisada. Diversos
mtodos esto disponveis para o objeto matcher. Eles sero abordados nos slides a seguir.
Quando executado, o exemplo produzir a seguinte sada:
Found match!
Programao Java SE 7 8 - 19
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Classes de Caractere
Caractere Descrio
. Corresponde a um nico caractere (letra, dgito ou caractere especial),
exceto os marcadores de fim de linha
[abc] Corresponde a qualquer a, b ou c nessa posio
[^abc] Corresponde a qualquer que no seja a, b ou c nessa posio
[a-c] Um intervalo de caracteres (nesse caso, a, b e c)
| Alternao; essencialmente um indicador ou
As classes de caractere permitem que voc faa a correspondncia de um caractere de diversas
formas.
Programao Java SE 7 8 - 20
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Classe de Caractere: Exemplos
String de
Destino
It was the best of times
Padro Descrio Correspondncia
de Texto
w.s
Qualquer sequncia que inicia
com w seguida por qualquer
caractere seguido por s.
It was the best of
times
w[abc]s
Qualquer sequncia que inicia
com w seguida por a, b ou
c e, depois, por s.
It was the best of
times
t[^aeo]mes
Qualquer sequncia que inicia
com t seguida por qualquer
caracteres que no seja a, e
ou o seguido por mes.
It was the best of
times
O cdigo desse exemplo pode ser encontrado no projeto StringExamples do arquivo
CustomCharClassExamples.java.
Programao Java SE 7 8 - 21
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Cdigo da Classe de Caractere: Exemplos
1 public class CustomCharClassExamples {
2 public static void main(String[] args){
3 String t = "It was the best of times";
4
5 Pattern p1 = Pattern.compile("w.s");
6 Matcher m1 = p1.matcher(t);
7 if (m1.find()) { System.out.println("Found: " + m1.group());
8 }
9
10 Pattern p2 = Pattern.compile("w[abc]s");
11 Matcher m2 = p2.matcher(t);
12 if (m2.find()) { System.out.println("Found: " + m2.group());
13 }
14
15 Pattern p3 = Pattern.compile("t[^eou]mes");
16 Matcher m3 = p3.matcher(t);
17 if (m3.find()) { System.out.println("Found: " + m3.group());
18 }
O exemplo no slide mostra duas maneiras de localizar was e uma maneira de localizar times.
Para que isso acontea em Java:
1. Crie um objeto Pattern para armazenar a expresso regular com a qual voc deseja
realizar a pesquisa.
2. Crie um objeto Matcher passando o texto a ser pesquisado para o objeto Pattern e
retornando um Matcher.
3. Chame Matcher.find() para pesquisar o texto com o Pattern definido.
4. Chame Matcher.group() para exibir os caracteres que correspondem ao padro.
Programao Java SE 7 8 - 22
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Classes de Caractere Predefinidas
Caractere
Predefinido
Classe de
Caractere
Caractere
Cancelado
Classe Cancelada
\d (dgito) [0-9] \D
[^0-9]
\w (caractere de
palavra)
[a-zA-Z0-9_] \W
[^a-zA-Z0-9_]
\s (espao em
branco)
[ \r\t\n\f\0XB] \S
[^ \r\t\n\f\0XB]
Diversas classes de caractere so usadas repetidas vezes. Essas classes so transformadas em
classes de caractere predefinidas. As classes existem para identificar dgitos, caracteres de
palavra e espao em branco.
Caracteres de Espao em Branco
\t: Caractere de tabulao
\n: Caractere de nova linha
\r: Retorno de carro
\f: Alimentao de formulrio
\x0B: Tabulao vertical
Programao Java SE 7 8 - 23
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Classe de Caractere Predefinida: Exemplos
String de
Destino
Jo told me 20 ways to San Jose in 15 minutes.
Padro Descrio Correspondncia
de Texto
\\d\\d
Localiza dois dgitos.** Jo told me 20 ways
to San Jose in 15
minutes.
\\sin\\s
Localiza in entre dois espaos
e os trs caracteres seguintes.
Jo told me 20 ways
to San Jose in 15
minutes.
\\Sin\\S
Localiza in entre dois
caracteres que no sejam
espao e os trs caracteres
seguintes.
Jo told me 20 ways
to San Jose in 15
minutes.
** Se houver correspondncias adicionais na linha atual, chamadas extras para find()
retornaro a prxima correspondncia nessa linha.
Exemplo:
Pattern p1 = Pattern.compile("\\d\\d");
Matcher m1 = p1.matcher(t);
while (m1.find()){
System.out.println("Found: " + m1.group());
}
Produz:
Found: 20
Found: 15
O cdigo desse exemplo pode ser encontrado no projeto StringExamples do arquivo
PredefinedCharClassExample.java.
Programao Java SE 7 8 - 24
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Quantificadores
Quantificador Descrio
*
O caractere anterior repetido zero ou mais vezes.
+
O caractere anterior repetido uma ou mais vezes.
?
O caractere anterior deve aparecer uma vez ou no deve
aparecer.
{n}
O caractere anterior aparece exatamente n vezes.
{m,n}
O caractere anterior aparece de m a n vezes.
{m,}
O caractere anterior aparece m ou mais vezes.
(xx){n}
Este grupo de caracteres repetido n vezes.
Os quantificadores permitem que voc selecione facilmente um intervalo de caracteres nas
consultas.
Programao Java SE 7 8 - 25
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Programao Java SE 7 8 - 26
O cdigo desse exemplo pode ser encontrado no projeto StringExamples do arquivo
QuantifierExample.java.
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Quantificador: Exemplos
String de
Destino
Longlonglong ago, in a galaxy far far away
Padro Descrio Correspondncia
de Texto
ago.* Localiza ago e 0 ou todos os
caracteres restantes na linha.
Longlonglong ago, in
a galaxy far far away
gal.{3} Corresponde a gal mais os trs
caracteres seguintes. Isso
substitui conforme usado em
um exemplo anterior.
Longlonglong ago, in
a galaxy far far away
(long){2} Localiza long duas vezes. Longlonglong ago, in
a galaxy far far away
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Voracidade
Uma expresso regular sempre tenta capturar o mximo
de caracteres possvel.
Use o operador ? para limitar a pesquisa
correspondncia mais curta possvel.
String de
Destino
Longlonglong ago, in a galaxy far far away.
Padro Descrio Correspondncia
de Texto
ago.*far
Uma expresso regular sempre
captura o mximo de caracteres
possvel.
Longlonglong ago, in
a galaxy far far away.
ago.*?far
O caractere ? desativa
principalmente a voracidade.
Longlonglong ago, in
a galaxy far far away.
Uma expresso regular sempre tenta estabelecer correspondncia com um padro que retorne o
maior nmero de caracteres. Esse mecanismo conhecido como princpio da voracidade. Use o
operador ? para limitar o resultado menor quantidade de caracteres necessria para fazer a
correspondncia do padro.
O cdigo desse exemplo pode ser encontrado no projeto StringExamples do arquivo
GreedinessExample.java.
Programao Java SE 7 8 - 27
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Quiz
Qual smbolo corresponde ao caracter que repetido um ou
mais vezes?
a. *
b. +
c. .
d. ?
Programao Java SE 7 8 - 28
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Objetos Matcher de Limite
ncora Descrio
^
Corresponde ao incio de uma linha
$
Corresponde ao fim de uma linha
\b
Corresponde ao incio ou fim de uma palavra
\B
No corresponde ao incio ou fim de uma palavra
Os caracteres de limite podem ser usados para fazer a correspondncia de diferentes partes de
uma linha.
Programao Java SE 7 8 - 29
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
O cdigo desse exemplo pode ser encontrado no projeto StringExamples do arquivo
BoundaryCharExample.java.
Programao Java SE 7 8 - 30
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Limite: Exemplos
String de
Destino
it was the best of times or it was the worst of times
Padro Descrio Correspondncia
de Texto
^it.*?times
A sequncia que inicia uma linha
com it seguida por alguns
caracteres e times, com a
voracidade desativada
It was the best of
times or it was the
worst of times
\\sit.*times$
A sequncia que inicia com it
seguida por alguns caracteres e
encerra a linha com times
It was the best of
times or it was the
worst of times
\\bor\\b.{3}
Localiza or delimitada por
palavras, mais os trs caracteres
seguintes.
It was the best of
times or it was the
worst of times
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Quiz
Qual smbolo corresponde ao fim de uma linha?
a. *
b. +
c. $
d. ^
Programao Java SE 7 8 - 31
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Com as expresses regulares, possvel usar parnteses para identificar partes de uma string.
Esse exemplo corresponde s partes componentes de um endereo de e-mail. Observe como
cada par de parnteses numerado. Em uma expresso regular, group(0) corresponde a todo
o texto retornado quando os grupos so usados.. Este o cdigo de origem do exemplo:
public class MatchingExample {
public static void main(String[] args){
String email = "george.washington@example.com";
Pattern p1 = Pattern.compile("(\\S+?)\\.(\\S+?)\\@(\\S+)");
Matcher m1 = p1.matcher(email);
if (m1.find()){
System.out.println("First: " + m1.group(1));
System.out.println("Last: " + m1.group(2));
System.out.println("Domain: " + m1.group(3));
System.out.println("Everything Matched: " + m1.group(0));
}
}
}
Programao Java SE 7 8 - 32
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Correspondncia e Grupos
String de Destino george.washington@example.com
3 Partes da
Correspondncia
(george).(washington)@(example.com)
Nmeros de
Grupo
( 1 ).( 2 )@( 3 )
Padro (\\S+?)\\.(\\S+?)\\@(\\S+)
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Usando o Mtodo replaceAll
Usando o mtodo replaceAll, possvel pesquisar
e substituir.
public class ReplacingExample {
public static void main(String[] args){
String header = "<h1>This is an H1</h1>";
Pattern p1 = Pattern.compile("h1");
Matcher m1 = p1.matcher(header);
if (m1.find()){
header = m1.replaceAll("p");
System.out.println(header);
}
}
}
possvel fazer uma pesquisa e substituio usando o mtodo replaceAll depois que fizer
uma busca.
A sada do programa a seguinte:
<p>This is an H1</p>
Programao Java SE 7 8 - 33
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Resumo
Nesta lio, voc aprendeu a:
Ler dados na linha de comando
Pesquisar strings
Analisar strings
Criar strings usando um StringBuilder
Pesquisar strings usando expresses regulares
Analisar strings usando expresses regulares
Substituir strings usando expresses regulares
Programao Java SE 7 8 - 34
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Exerccio 8-1 - Viso Geral:
Analisando Texto com split()
Este exerccio aborda o uso do mtodo String.split()
para analisar o texto.
Programao Java SE 7 8 - 35
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Exerccio 8-2 - Viso Geral:
Criando um Programa de Pesquisa
de Expresso Regular
Este exerccio aborda a criao de um programa que executa
pesquisas em um arquivo de texto usando uma expresso
regular.
Programao Java SE 7 8 - 36
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2012, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Exerccio 8-3 - Viso Geral:
Transformando HTML com
Expresses Regulares
Este exerccio aborda a transformao do HTML de um
arquivo usando vrias expresses regulares.
Programao Java SE 7 8 - 37
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
E
r
r
o
r
:
Y
o
u
a
r
e
n
o
t
a
V
a
l
i
d
P
a
r
t
n
e
r
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D