Você está na página 1de 38

Elogios ao Guia de estudos para programador e desenvolvedor em Java 2 certificado pela Sun

Kathy Sierra uma das poucas pessoas no mundo que consegue fazer coisas complicadas parecerem muito simples. E
como se isso no fosse suficiente, ela consegue fazer com que assuntos montonos paream interessantes. Sempre fico
ansioso para ler o que Kathy escreve ela uma de minhas autoras favoritas.
- Paul Wheaton, Chefe de Acompanhamento da JavaRanch.com
Quem melhor para escrever um guia de estudos sobre Java do que Kathy Sierra, que reina soberana quando se
trata de treinamento em Java? Kathy Sierra conseguiu novamente aqui est um guia de estudos que j poder
lhe garantir a certificao!
- James Cubeta, Engenheiro de Sistemas, SGI
O que mais aprecio em Kathy seu esforo para fazer com que todos nos lembremos de que estamos ensinando
pessoas e no apenas fazendo uma palestra sobre Java. Seu entusiasmo e vontade em oferecer um treinamento da mais
alta qualidade que atenda as necessidades do aluno, com certeza no encontra paralelo na SunEd. Sem dvida, h
centenas de alunos que se beneficiaram por terem assistido a suas aulas.
- Victor Peters, fundador da Next Step Education e Instrutor Certificado Java pela Sun
Quero agradecer a Kathy pelo EXCELENTE guia de estudos. O livro bem escrito, informa especificamente o que voc ter
que saber no exame e cada conceito explicado de maneira clara com a utilizao de um exemplo da vida real. Da maneira
que foi escrito, voc se sentir em uma sala de aula como se algum estivesse realmente lhe ensinando os conceitos difceis,
mas no de maneira formal e fria. As perguntas no final dos captulos tambm so MUITO boas e estou certo de que ajudaro
os candidatos a passarem no teste. Fique alerta para esse livro incrivelmente astuto.
- Alfred Raouf, Desenvolvedor de Solues na Web
O exame de certificao da Sun certamente no foi como um passeio no parque, mas o material de Kathy permitiu no
s que eu passasse no exame, mas que passasse bem!
- Mary Whetsel, Especialista Snior em Tecnologia, Integrao e Estratgia de Aplicaes, The St. Paul Companies
Bert demonstra uma aptido comprovada e fantstica de transformar complexidade em simplicidade ao oferecer um
percurso dirigido no aprendizado do que necessrio para o exame da certificao.
- Thomas Bender, Presidente, Gold Hill Software Desing, Inc.
Por sua habilidade em expressar claramente conceitos complexos aos que assistem a seus treinamentos, todos os
alunos conseguem se tornar especialistas no que Bert tem a ensinar.
- David Ridge, Diretor Geral, Ridge Associates
Achei este livro extremamente til para ajudar o candidato a passar no exame. Ele foi muito bem escrito, com a
quantidade ideal de comentrios bem-humorados para fazer com que voc se esquea de que est estudando para um
teste to difcil. ALTAMENTE RECOMENDADO!
-Nicole Y. McCullough
Nunca me diverti tanto lendo um livro tcnico quanto no caso deste aqui... Hoje de manh, fiz o exame SCJP e
consegui acertar 98% (60 de 61). Esse sucesso no teria sido possvel sem este livro!
-Yurie Nagorny
Eu fiz o SCJP 1.4 em Julho de 2004 e consegui 95% (58/61). Kathy e Bert tm um estilo incrvel de escrever, e
literalmente gravaram os conceitos principais na minha cabea.
-Bhushan P. Madan (Kansas, Estados Unidos)

Eu fiz meu teste de certificao semana passada e fui aprovado com 95% de acertos. Se no tivesse
estudado por este livro, teria poucas chances de obter um resultado to bom. Obrigado, Kathy e Bert, pelo
maravilhoso livro!
-Jon W. Kinsting (Saratoga, California, Estados Unidos)
No hesite em fazer deste livro o seu principal guia para preparar-se para o SCJP 1.4. Os autores fizeram
um trabalho magnfico ao apresentar os fatos importantes que voc precisar saber para o exame, ao
mesmo tempo deixaram de lado toneladas de outras informaes que, em outro contexto, seriam
importantes, mas que vo alm do escopo deste livro. Ambos os autores participaram da criao das
questes reais do exame, fornecendo dessa forma um valiosssimo insight sobre a verdadeira natureza do
que voc encontrar no exame. Ao contrrio de muitos outros guias de certificao. Este aqui uma
leitura prazerosa. Neste livro, at os mais enfadonhos objetivos da Sun so combinados com um
revigorante bom-humor.
-Vad Fogel (Ontario, Canad)

Certificao Sun para


Programador JAVA 6
Guia de Estudo
(Exame 310-065)

Kathy Sierra
Bert Bates

Para a Comunidade Java

Sumrio Resumido
1- Declaraes e Controle de Acesso ............................................................................................1
2 - Orientao a Objetos ..............................................................................................................49
3 - Atribuies .............................................................................................................................105
4 - Operadores ...........................................................................................................................165
5 - Controle de Fluxo, Excees e Assertivas ............................................................................187
6 - Strings, E/S, formatao e Parsing..........................................................................................241
7 - Genricos e Colees ...........................................................................................................301
8 - Classes Internas .....................................................................................................................371
9 - Threads ..................................................................................................................................393
10 - Desenvolvimento ..................................................................................................................441
A - Apndice................................................................................................................................461
ndice Remissivo ..........................................................................................................................463

Sumrio
CAPTULO 1 - DECLARAES E CONTROLE DE ACESSO ................................... 1
Reviso de Java ......................................................................................................................................... 2
Identificadores e Palavras-chave ................................................................................................................. 2
Herana .................................................................................................................................................. 2
Interfaces ................................................................................................................................................. 2
Encontrando Outras Classes ...................................................................................................................... 2

Objetivo para a Certificao .......................................................................................................... 3


Identificadores e JavaBeans (Objetivos 1.3 e 1.4) .................................................................................... 3
Identificadores Legais ............................................................................................................................... 3
Convenes de Cdigo Java da Sun ...................................................................................................................................... 4
Padres JavaBeans ................................................................................................................................................................ 5
Regras de nomeao de Propriedades JavaBeans...............................................................................................................................5
Regras de nomeao de Listeners JavaBeans.......................................................................................................................................6

Objetivo para a Certificao .......................................................................................................... 6


Declarar Classes (Objetivo l.1 do Exame) ............................................................................................... 6
Regras de Declarao para Arquivos-Fonte ......................................................................................................................... 7
Declaraes e Modificadores de Classes ............................................................................................................................. 7
Acesso a Classes ...................................................................................................................................... 8
Outros Modificadores de Classes (No referentes a Acesso) ........................................................................... 9
Exerccio 1-1 Criando uma Superclasse Abstrata e uma Subclasse Concreta ..................................................................... 10

Objetivo para a Certificao ........................................................................................................ 11


Declarar Interfaces (Objetivos 1.1 e 1.2 do Exame) ............................................................................. 11
Declarando uma Interface ................................................................................................................................................... 11
Declarando Constantes de Interface ................................................................................................................................... 13

Objetivo para a Certificao ........................................................................................................ 14


Declarar Membros de Classes (Objetivos 1.3 e 1.4) ............................................................................. 14
Modificadores de Acesso ................................................................................................................................................... 14
Membros Public (Pblicos) ...................................................................................................................... 16
Membros Private (Privados) ..................................................................................................................... 17
Membros Protected e Default.................................................................................................................... 20
Detalhes de Protected .............................................................................................................................. 21
Detalhes de Default ................................................................................................................................ 22
Variveis Locais e Modificadores de Acesso ................................................................................................ 23
Modificadores No Referentes a Acesso ............................................................................................................................ 24
Mtodos Final ........................................................................................................................................ 24
Argumentos Final ................................................................................................................................... 24
Mtodos Abstratos .................................................................................................................................. 25
Mtodos Sincronizados ............................................................................................................................ 27
Mtodos Nativos .................................................................................................................................... 27
Mtodos Strictfp ...................................................................................................................................... 27
Mtodos com Listas de Argumentos Variveis (var-args) ............................................................................... 27
Declaraes de Construtores ............................................................................................................................................. 28
Declaraes de Variveis ................................................................................................................................................... 29
Declarando Primitivos e Intervalos de Primitivos .......................................................................................... 29
Declarando Variveis de Referncia .......................................................................................................... 30
Variveis de Instncias ............................................................................................................................ 30
Variveis Locais (Automtica/de Pilha/Mtodo) .......................................................................................... 31
Declaraes de Arrays ............................................................................................................................. 33
Variveis Final ....................................................................................................................................... 34
Variveis Transient .................................................................................................................................. 35
Variveis Volatile ..................................................................................................................................... 35

Certificao Sun para Programador JAVA 6 Guia de Estudo


Variveis e Mtodos Estticos ................................................................................................................... 35
Declarando Enums ............................................................................................................................................................. 35
Declarao de Construtores, Mtodos e Variaes em um enum ................................................................... 37
Resumo para a Certificao ...................................................................................................................................... 39
Exerccios Rpidos ................................................................................................................................................................... 40

Teste Individual ....................................................................................................................................... 44


Respostas ................................................................................................................................................................................. 47

CAPTULO 2 - ORIENTAO A OBJETOS ............................................................. 49


Objetivo para a Certificao ........................................................................................................ 50
Benefcios do Encapsulamento (Objetivo 5.1 do exame) ...................................................................... 50
Objetivo para a Certificao ........................................................................................................ 52
Herana, -Um (IS-A), Tem-Um (HAS-A) (Objetivo 5.5 do Exame) .................................................... 52
Relacionamentos -UM e TEM-UM ...................................................................................................... 55
-UM ................................................................................................................................................... 55
TEM-UM ............................................................................................................................................... 56

Na Sala de Aula ....................................................................................................................................... 57


Objetivo para a Certificao ........................................................................................................ 58
Polimorfismo (Objetivo 5.2 do Exame) ................................................................................................. 58
Objetivo para a Certificao ........................................................................................................ 60
Sobrescrevendo / Sobrecarregando (Objetivos 1.5 e 5.4 do Exame) ................................................... 60
Mtodos Sobrescritos ........................................................................................................................................................ 60
Chamando a Verso da Superclasse de um Mtodo Sobrescrito .................................................................... 63
Exemplos de Mtodos Subscritos Vlidos e No vlidos ............................................................................... 64
Mtodos Sobrecarregados ................................................................................................................................................. 64
Sobrecargas Vlidas ............................................................................................................................... 64
Chamando Mtodos Sobrecarregados ....................................................................................................... 65
Polimorfismo em Mtodos Sobrecarregado e Sobrescritos ............................................................................. 66

Objetivo para a Certificao ........................................................................................................ 68


Converso (cast) de Variveis de Referncia (Objetivo 5.2 do Exame) ................................................ 68
Objetivo para a Certificao ........................................................................................................ 71
Implementando uma Interface (Objetivo 1.2 do Exame) ...................................................................... 71
Objetivo para a Certificao ........................................................................................................ 74
Tipos de Retorno Vlidos (Objetivo 1.5 do Exame) .............................................................................. 74
Declaraes de Tipos de Retorno ...................................................................................................................................... 74
Tipos de Retorno de Mtodos Sobrecarregados ........................................................................................... 74
Sobrescrita e Tipos de Retorno, e Retornos Covariantes ................................................................................ 75
Retornando um Valor .......................................................................................................................................................... 75

Objetivo para a Certificao ........................................................................................................ 77


Construtores e Instanciao (Objetivos 1.6, 5.3 e 5.4 do Exame) ........................................................ 77
Aspectos Bsicos do Construtor ................................................................................................................ 77
Cadeia de Construtores ........................................................................................................................... 77
Regras dos Construtores .......................................................................................................................... 78
Identificando se um Construtor Padro Ser Criado ........................................................................................................... 79
Como Voc Pode Ter a Certeza de Que um Construtor Padro Ser Criado? .................................................. 79
O Que Acontecer se o Construtuor da Superclasse Tiver Argumentos?......................................................... 80
Construtores Sobrecarregados .......................................................................................................................................... 82

Sumrio

XI

Objetivo para a Certificao ....................................................................................................... 85


Static (Objetivo 1.3 do Exame) ........................................................................................................................................... 85
Variveis e Mtodos Estticos ................................................................................................................... 85
Acessando Variveis e Mtodos Static ........................................................................................................ 87

Objetivo para a Certificao ........................................................................................................ 88


Acoplamento e Coeso (Objetivo 5.1 do Exame) ................................................................................ 88
Acoplamento ......................................................................................................................................... 89
Coeso ................................................................................................................................................. 90
Resumo para a Certificao .......................................................................................................................................... 90
Exerccios Rpidos ......................................................................................................................................................................... 92
Teste Individual .............................................................................................................................................................................. 95
Respostas ..................................................................................................................................................................................... 101

CAPTULO 3 - ATRIBUIES ................................................................................ 105


Pilha e Heap Uma Reviso ................................................................................................................ 106
Objetivo para a Certificao ...................................................................................................... 107
Literais, Atribuies e Variveis (Objetivos 1.3 e 7.6 do Exame) ......................................................... 107
Valores Literais de Todos os Tipos Primitivos .................................................................................................................. 107
Literais Inteiros ...................................................................................................................................... 103
Literais de Ponto Flutuante ...................................................................................................................... 108
Literais Booleanos .................................................................................................................................. 109
Literais de Caracteres ............................................................................................................................. 109
Valores Literais Para Strings ..................................................................................................................... 109
Operadores de Atribuio ................................................................................................................................................ 109
Atribuies Primitivas ............................................................................................................................. 110
Converso de Tipos Primitivos ................................................................................................................. 111
Exerccio 3-1 Convertendo tipos Primitivos (Cast ou Tipagem) ....................................................................................... 112
Atribuies de Variveis de Referncia ...................................................................................................... 114
Escopo da Varivel ................................................................................................................................ 115
Usando uma Varivel ou Elemento de Array Que No Tenha Sido Inicializado e Atribudo .............................................. 116
Variveis de Instncia de Tipo Primitivo e de Objeto ................................................................................... 117
Variveis de Instncia Primitivas .............................................................................................................. 117
Variveis de Instncia de Referncia a Objetos .......................................................................................... 117
Variveis de Instncia de Array ................................................................................................................ 118
Tipos Primitivos e Objetos Locais (de Pilha, Automticos) ........................................................................... 119
Tipos Primitivos Locais ............................................................................................................................ 119
Referncias de Objetos Locais ................................................................................................................. 120
Arrays Locais ........................................................................................................................................ 121
Atribuindo uma Varivel de Referncia a Outra ......................................................................................... 121

Objetivo para a Certificao ...................................................................................................... 122


Passando Variveis para Mtodos (Objetivo 7.3 do Exame) ................................................................ 122
Passando Variveis de Referncia a Objeto ....................................................................................................................... 123
A Linguagem Java Usa a Semntica de Passagem por Valor? ............................................................................................. 123
Passando Variveis Primitivas ........................................................................................................................................... 124
Na Sala de Aula ................................................................................................................................................................ 124

Objetivo para a Certificao ...................................................................................................... 126


Declarao, Construo e Inicializao de Arrays (Objetivo 1.3 do Exame) ...................................... 126
Declarando um Array ....................................................................................................................................................... 126
Declarando um Array de Tipos Primitivos .................................................................................................. 126
Construindo um Array ...................................................................................................................................................... 127
Construindo Arrays Unidimensionais ........................................................................................................ 127
Construindo Arrays Multidimensionais ...................................................................................................... 128
Inicializando um Array ...................................................................................................................................................... 129

XII

Certificao Sun para Programador JAVA 6 Guia de Estudo


Inicializando Elementos em um Loop ........................................................................................................ 130
Declarando, Construindo e Inicializando em uma Linha ............................................................................. 130
Construindo e Inicializando um Array Annimo ......................................................................................... 131
Atribuies Vlidas Para os Elementos do Array ......................................................................................... 132
Arrays de Tipos Primitivos ....................................................................................................................... 132
Arrays de Referncia a Objetos ................................................................................................................ 133
Atribuies de Variveis de Referncia de Arrays Unidimensionais ................................................................ 134
Atribuies de Variveis de Referncia de Arrays Multidimensionais .............................................................. 134
Blocos de Inicializao ........................................................................................................................... 135

Objetivo para a Certificao ...................................................................................................... 137


Usando Classes Wrapper e Boxing (Objetivo 3.1 do Exame) ............................................................. 137
Uma Viso Geral das Classes Wrapper ............................................................................................................................ 137
Criando Objetos Wrapper ............................................................................................................................................... 137
Os Construtores Wrapper ....................................................................................................................... 137
Os Mtodos valueOf( ) .......................................................................................................................... 138
Usando os Utilitrios de Converso das Classes Wrapper ............................................................................................... 138
XxxValue( ) ............................................................................................................................................ 138
ParseXxx( ) e ValueOf( ) .......................................................................................................................... 139
toString( ) ............................................................................................................................................. 140
toXxxString( ) (Base Binria, Hexadecimal e Octal) ..................................................................................... 140
Autoboxing ....................................................................................................................................................................... 140
Boxing, ==, e equals() .......................................................................................................................... 141
Onde Pode ser Usado o Boxing ............................................................................................................... 142

Objetivo para a Certificao ...................................................................................................... 143


Sobrecarregando (Objetivos 1.5 e 5.4 do Exame) .............................................................................. 143
Sobrecarregando da Maneira Difcil Correspondncia de Mtodos ............................................................ 143
Sobrecarga com Boxing e Var-args .......................................................................................................... 144
Ampliando Variveis de Referncia .......................................................................................................... 145
Sobrecarga na Combinao de Ampliao com Boxing ............................................................................. 145
Sobrecarga em Combinao com Var-args ............................................................................................... 146

Objetivo para a Certificao ...................................................................................................... 147


Coleta de Lixo (Garbage Collection) (Objetivo 7.4 do Exame) .......................................................... 147
Viso Total do Gerenciamento da Memria e da Coleta de Lixo ...................................................................................... 147
Viso Geral do Coletor de Lixo em Java ........................................................................................................................... 147
Quando o Coletor de Lixo Executado? .................................................................................................. 148
Como o Coletor de Lixo Funciona? ......................................................................................................... 148
Escrevendo um Cdigo que Torne os Objetos Explicitamente Elegveis Para a Coleta ..................................................... 148
Anulando uma Referncia ...................................................................................................................... 148
Reatribuindo uma Varivel de Referncia .................................................................................................. 149
Isolando uma Referncia ........................................................................................................................ 150
Forando a Coleta de Lixo ...................................................................................................................... 150
Fazendo uma Limpeza Antes da Coleta do Lixo o Mtodo Finalize( ) ......................................................... 152
Cuidados Relacionados com Finalize( ) .................................................................................................... 152
Resumo para a Certificao ......................................................................................................................................... 152
Exerccios Rpidos ....................................................................................................................................................................... 153
Teste Individual ................................................................................................................................................... 156
Respostas .................................................................................................................................................................................... 162

CAPTULO 4 - OPERADORES ................................................................................ 165


Objetivo para a certificao ....................................................................................................... 166
Operadores Java (Objetivo 7.6 do Exame) .......................................................................................... 166
Operadores de Atribuio ...................................................................................................................... 166
Operadores de Atribuio Compostos ...................................................................................................... 166
Operadores de Comparao ........................................................................................................................................... 167
Operadores de Igualdade ................................................................................................................................................. 168

Sumrio

XIII

Igualdade de Tipos Primitivos .................................................................................................................. 168


Igualdade de Variveis de Referncia ....................................................................................................... 169
Igualdade para Enums ........................................................................................................................... 169
Operador de Comparao instanceof ...................................................................................................... 170
Erro de Compilao de instanceof ........................................................................................................... 171
Operadores Aritmticos ................................................................................................................................................... 172
O Operador Resto (%) (Mdulo) ............................................................................................................. 172
Operador de Concatenao de Strings ..................................................................................................... 173
Operadores de Incremento e Decremento ................................................................................................. 174
Operador Condicional........................................................................................................................175
Operadores Lgicos ............................................................................................................................... 176
Operadores Bitwise (No Caem no Exame!) .............................................................................................. 176
Operadores Lgicos de Abreviao (Short-Circuit) ..................................................................................... 176
Operadores Lgicos (Que No So de Abreviao) (NOT Short-Circuit) ....................................................... 178
Operadores Lgicos ^ e ! ...................................................................................................................... 178
Resumo para a Certificao ......................................................................................................................................... 179
Exerccios Rpidos ....................................................................................................................................................................... 179
Teste Individual ............................................................................................................................................................................ 180
Respostas ..................................................................................................................................................................................... 185

CAPTULO 5 - CONTROLE DE FLUXO, EXCEES E ASSERTIVAS ................ 187


Objetivo para a Certificao ...................................................................................................... 188
Escrevendo o Cdigo Usando Instrues if e switch
(Objetivo 2.1 do Exame) ...................................................................................................................... 188
Ramificao If-else ............................................................................................................................................................ 188
Expresses Vlidas para Instrues If ........................................................................................................ 190
Instrues switch .............................................................................................................................................................. 192
Expresses Vlidas para Switch e Case ............................................................................................................................ 192
Break e a Passagem Completa em Blocos Switch ....................................................................................... 194
A Instruo Case Default ........................................................................................................................ 196
Exerccio 5-1 Criando uma Instruo Switch-case ............................................................................................................ 197

Objetivo para a Certificao ...................................................................................................... 197


Loops e Iteradores (Iterators) (Objetivo 2.2 do exame) ..................................................................... 197
Usando loops while .......................................................................................................................................................... 197
Usando loops do .............................................................................................................................................................. 198
Usando loops for .............................................................................................................................................................. 198
O Loop for Bsico (Loop for) ................................................................................................................... 199
Loop for Bsico: Declarao e Inicializao .............................................................................................. 199
Loop for Bsico: Expresso Condicional (Booleana) ................................................................................... 199
Loop for Bsico: Expresso de Iterao ..................................................................................................... 200
Loop for Bsico: Caractersticas do Loop for .............................................................................................. 200
O Loop for Aprimorado (para Arrays) ....................................................................................................... 201
Usando Break e Continue ................................................................................................................................................. 202
Instrues no Rotuladas .................................................................................................................................................. 203
Instrues Rotuladas ......................................................................................................................................................... 204
Exerccio 5-2 Criando um loop while rotulado ................................................................................................................ 205

Objetivo para a Certificao ...................................................................................................... 205


Tratamento de Excees (Objetivos 2.4 e 2.5 do Exame) .................................................................. 205
Capturando uma Exceo Usando Try e Catch ................................................................................................................ 206
Usando Finally .................................................................................................................................................................. 207
Propagando Excees No Capturadas ........................................................................................................................... 209
Exerccio 5-3 Propagando e Capturando uma Exceo .................................................................................................... 210
Definindo Excees .......................................................................................................................................................... 210
Hierarquia de Excees .................................................................................................................................................... 211
Manipulando uma Hierarquia Inteira de Classes de Excees ........................................................................................... 212
Correspondncia/ Combinao de Excees ................................................................................................................... 212

XIV

Certificao Sun para Programador JAVA 6 Guia de Estudo


Declarao de Excees e Interface Pblica ..................................................................................................................... 214
Relanando a Mesma Exceo .......................................................................................................................................... 217
Exerccio 5-4 Criando uma Exceo ................................................................................................................................. 217

Objetivo para a Certificao ...................................................................................................... 218


Erros e Excees Comuns (Objetivo 2.6 do Exame) ......................................................................... 218
De Onde Vm as Excees ..................................................................................................................... 218
Excees Lanadas pela JVM .................................................................................................................. 218
Excees Lanadas Programaticamente .................................................................................................... 219
Um Resumo das Excees e Erros para o Exame ....................................................................................... 219

Objetivo para a Certificao ...................................................................................................... 220


Trabalhando com o Mecanismo de Assertivas (Assertion) (Objetivo 2.3 do Exame) ........................ 220
Viso Geral das Assertivas ................................................................................................................................................ 221
Regras das Expresses de Assertivas ......................................................................................................... 222
Habilitando Assertivas ...................................................................................................................................................... 223
Identificador x Palavra-Chave ................................................................................................................. 223
Usando a Verso 6 de java e javac ......................................................................................................... 223
Compilando um Cdigo Atento s Assertivas ............................................................................................ 223
Execuo com Assertivas ........................................................................................................................ 224
Ativando Assertivas no Tempo de Execuo ............................................................................................... 224
Desativando Assertivas em Tempo de Execuo ......................................................................................... 224
Ativao e Desativao Seletiva .............................................................................................................. 224
Usando as Assertivas Apropriadamente ........................................................................................................................... 225
No Use Assertivas para Validar Argumentos de um Mtodo Pblico. .......................................................... 226
Use as Assertivas para Validar Argumentos de um Mtodo Privado. ............................................................. 226
No Use Assertivas para Validar Argumentos de Linha de Comando. ........................................................... 226
No Use Assertivas, Mesmo em Mtodos Pblicos, para Procurar Instrues Case Que Sabe Que Nunca Ocorrero ... 226
No Use Expresses Assertivas Que Possam Causar Efeitos Colaterais! ........................................................ 227
Resumo para a Certificao .............................................................................................................................................. 227
Exerccios Rpidos ............................................................................................................................................................ 228
Teste Individual ................................................................................................................................................................. 231
Respostas .......................................................................................................................................................................... 238

CAPTULO 6 - STRINGS, E/S, FORMATAO E PARSING ................................ 241


Objetivo para a Certificao ...................................................................................................... 242
String, StringBuilder e StringBuffer (Objetivo 3.1 do Exame) ............................................................... 242
A Classe String .................................................................................................................................................................. 242
Strings so Objetos Imutveis .................................................................................................................. 242
Fatos Importantes Eelacionados aos Objetos String e a Memria ..................................................................................... 245
Criando Novas Strings ........................................................................................................................... 246
Mtodos Importantes da Classe String ...................................................................................................246
As Classes StringBuffer e StringBuilder ............................................................................................................................. 248
StringBuffer x StringBuilder ...................................................................................................................... 248
Usando StringBuffer e StringBuilder .......................................................................................................... 249
Mtodos Importantes das Classes StringBuffer e StringBuilder ......................................................................................... 249

Objetivo para a Certificao ...................................................................................................... 250


Navegao de Arquivos e E/S (I/O) (Objetivo 3.2 do Exame) ............................................................ 250
Criando Arquivos com a Classe File ........................................................................................................ 251
Usando FileWriter e FileReader ............................................................................................................... 253
Combinando Classes de E/S ................................................................................................................... 254
Trabalhando com Arquivos e Diretrios .................................................................................................... 256
A Classe java.io.Console ....................................................................................................................... 258

Objetivo para a Certificao ...................................................................................................... 260


Serializao (Objetivo 3.3 do Exame) .................................................................................................. 260

Sumrio

XV

Trabalhando com ObjectOutputStream e ObjectInputStream ....................................................................... 260


Grafo de Objetos .................................................................................................................................. 261
Usando writeObject e readObject ............................................................................................................ 264
Como a Herana Afeta a Serializao ...................................................................................................... 265
A Serializao no para Estticos ......................................................................................................... 268

Objetivo para a Certificao ...................................................................................................... 268


Datas, Nmeros e Moeda (Objetivo 3.4 do Exame) ........................................................................... 268
Trabalhando com Datas, Nmeros e Moedas ................................................................................................................... 268
Orquestrando Classes Relacionadas a Datas e Nmeros ............................................................................ 269
A Classe Date ....................................................................................................................................... 269
A Classe Calendar ................................................................................................................................ 270
A Classe DateFormat ............................................................................................................................. 272
A Classe Locale ..................................................................................................................................... 273
A Classe NumberFormat ........................................................................................................................ 275

Objetivo para a Certificao ...................................................................................................... 277


Parsing, Tokenizao e Formatao (Objective 3.5 do Exame) .......................................................... 277
Um Tutorial de Busca ....................................................................................................................................................... 277
Buscas Simples ...................................................................................................................................... 277
Buscas Usando Metacaracteres ............................................................................................................... 278
Buscas Usando Quantificadores .............................................................................................................. 279
O Ponto Pr-definido ............................................................................................................................. 280
Quantificadores Gananciosos ................................................................................................................. 281
Quando Metacaracteres e Strings Colidem ............................................................................................... 281
Localizando Dados Atravs da Correspondncia de Padres .......................................................................................... 282
Tokenizao ...................................................................................................................................................................... 284
Tokens e Delimitadores ........................................................................................................................... 284
Tokenizando com String.split() ................................................................................................................. 284
Tokenizando com Scanner ...................................................................................................................... 285
Formatando com printf() e format() .................................................................................................................................. 286
Resumo para a Certificao ...................................................................................................................................................... 288
Exerccios Rpidos ................................................................................................................................................................... 289
Teste Individual ........................................................................................................................................................................ 291
Respostas ................................................................................................................................................................................. 299

CAPTULO 7 - GENRICOS E COLEES ............................................................ 301


Objetivo para a Certificao ...................................................................................................... 302
Sobrescrevendo hashCode( ) e equals( ) (Objetivo 6.2 do Exame) .................................................... 302
Sobrescrevendo equals( ) ................................................................................................................................................. 303
O que Significar a No Sobrescrita de equals( ) ...................................................................................... 303
Implementando um Mtodo equals( ) ....................................................................................................... 304
O Contrato de equals( ) ......................................................................................................................... 306
Sobrescrevendo hashCode( ) ........................................................................................................................................... 306
Entendendo os Cdigos de Hashing (Hash Codes) .................................................................................... 306
Implementando hashCode( ) ................................................................................................................... 308
O Contrato de hashCode( ) .................................................................................................................... 309

Objetivo para a Certificao ...................................................................................................... 310


Conjuntos (Objetivo 6.1 do exame) .................................................................................................... 310
Mas o Que Fazer com uma Coleo? ............................................................................................................................... 310
Principais Interfaces e Classes do Framework Collections ............................................................................ 310
A Interface List ....................................................................................................................................... 313
A Interface Set...................................................................................................................................314
A Interface Map .................................................................................................................................... 314
A Interface Queue..............................................................................................................................314

Objetivo para a Certificao ..................................................................................................... 316

XVI

Certificao Sun para Programador JAVA 6 Guia de Estudo

Usando a Framework Collections (Objetivo 6.3 e 6.5 do Exame) ..................................................... 316


Fundamentos de ArrayList ................................................................................................................................................ 316
Autoboxing com Colees ................................................................................................................................................ 317
Classificando Colees e Arrays ....................................................................................................................................... 317
Classificando Colees .......................................................................................................................... 317
A Interface Comparable ......................................................................................................................... 319
Classificando com Comparator ............................................................................................................... 320
Classificando com a Classe Arrays .......................................................................................................... 321
Fazendo Buscas em Arrays e em Conjuntos .............................................................................................. 322
Convertendo Arrays em Listas e de Volta em Arrays .................................................................................... 323
Usando Lists ......................................................................................................................................... 324
Usando Sets .......................................................................................................................................... 325
Usando Maps ....................................................................................................................................... 326
Navegao (Busca) em TreeSets e TreeMaps ............................................................................................. 328
Outros Mtodos de Navegao .............................................................................................................. 329
Enquete ............................................................................................................................................... 329
Ordem Descendente .............................................................................................................................. 330
Colees Vinculadas .............................................................................................................................. 330
Usando a Classe PriorityQueue ............................................................................................................... 332
Viso Geral de Mtodos para Arrays e Collections..................................................................................333
Viso Geral dos Mtodos para List, Set, Map e Queue.............................................................................333

Objetivo para a Certificao.................................................................................................................335


Tipos Genricos (Objetivos 6.3 e 6.4 do Exame).................................................................................335
A Forma Antiga de Usar Colees ................................................................................................................................................335
Genricos e Cdigos Antigos (Cdigo Legado)..............................................................................................................................337
Misturando Colees Genricos e No Genricos ...................................................................................................................... 338
Polimorfismo e os Genricos ............................................................................................................................................ 342
Mtodos Genricos .......................................................................................................................................................... 343
Declaraes Genricas ..................................................................................................................................................... 352
Criando a sua Prpria Classe Genrica ................................................................................................... 352
Criando Mtodos Genricos ................................................................................................................... 355
Resumo para a Certificao ......................................................................................................................................................... 357
Exerccios Rpidos ....................................................................................................................................................................... 357
Teste Individual .................................................................................................................................................... 361
Respostas ..................................................................................................................................................................................... 369

CAPTULO 8 - CLASSES INTERNAS ..................................................................... 371


Objetivo para a Certificao ...................................................................................................... 372
Classes Internas .................................................................................................................................... 372
Codificando uma Classe Interna Comum ...................................................................................................................... 373
Instanciando uma Classe Interna ............................................................................................................. 374
Referenciando a Instncia Interna ou Externa de Dentro da Classe Interna ........................................................................ 375

Objetivo para a Certificao ...................................................................................................... 376


Classes Internas Locais de Mtodo ...................................................................................................... 376
O que um Objeto Interno Local de Mtodo Pode ou No Fazer ...................................................................................... 377

Objetivo para a Certificao ...................................................................................................... 378


Classes Internas Annimas ................................................................................................................... 378
Classes Internas Annimas Simples, (Plain-Old-Anonymous Inner Classe) Verso Um ....................................................... 378
Classes Internas Annimas Simples, (Plain-Old-Anonymous Inner Classe) Verso Dois ..................................................... 381
Classe Interna Annima Definida no Argumento ............................................................................................................... 381

Objetivo para a Certificao ..................................................................................................... 383

Sumrio

XVII

Classes Estticas Aninhadas .................................................................................................................. 383


Instanciando Uma Classe Aninhada Esttica ..................................................................................................................... 383
Resumo para a Certificao ......................................................................................................................................................... 384
Exerccios Rpidos ....................................................................................................................................................................... 384
Teste Individual .................................................................................................................................................... 385
Respostas ..................................................................................................................................................................................... 391

CAPTULO 9 - THREADS ....................................................................................... 393


Objetivo para a Certificao ...................................................................................................... 394
Definindo, Instanciando e Iniciando Thread (Objetivo 4.1 do Exame) ................................................ 394
Criando uma Thread ........................................................................................................................ 395
Definindo uma Thread ...................................................................................................................................................... 395
Estendendo java.lang.Thread ............................................................................................................................................ 395
Implementando java.lang.Runnable ................................................................................................................................... 396
Instanciando uma Thread ................................................................................................................................................. 396
Iniciando uma Thread ....................................................................................................................................................... 397
Iniciando e Executando Mltiplas Threads ........................................................................................................................ 400
O Agendador de Threads (Thread Sheduler) ................................................................................................................... 402

Objetivo para a Certificao ...................................................................................................... 403


Estados e Transies de Threads (Objetivo 4.2 do Exame) ................................................................ 403
Estados das Threads ........................................................................................................................................................ 403
Impedindo a Execuo da Thread .................................................................................................................................... 404
Suspenso ......................................................................................................................................................................... 404
Exerccios 9-1Criando um Thread e Colocando-o em Suspenso .................................................................................... 406
Prioridade das Threads e o Mtodo Yield() ..................................................................................................................... 406
O Mtodo join( ) ............................................................................................................................................................... 407

Objetivo para a Certificao ...................................................................................................... 409


Sincronizando o Cdigo (Objetivo 4.3 do Exame) .............................................................................. 409
Sincronizao e Bloqueios ................................................................................................................................................ 413
Exerccio 9-2 Sincronizando um Bloco de Cdigo ............................................................................................................ 415
O que Acontecer se uma Thread no Puder Obter o Bloqueio? ..................................................................415
Ento, Quando Eu Preciso Sincronizar? ................................................................................................... 416
Classes Seguras em Relao a Threads (thread-safe) .................................................................................. 417
Impasse em Threads (Dead Lock) .................................................................................................................................... 418

Objetivo para a Certificao ...................................................................................................... 419


Interao Entre os Threads (Objetivo 4.4 do Exame) ........................................................................ 419
Usando notifyAll( ) Quando Houver a Possibilidade de Muitas Threads Estarem Esperando ........................................... 423
Usando wait( ) em um Loop .................................................................................................................... 424
Resumo para a Certificao ......................................................................................................................................................... 426
Exerccios Rpidos ....................................................................................................................................................................... 426
Teste Individual ............................................................................................................................................................................ 428
Respostas ..................................................................................................................................................................................... 437
Respostas dos Exerccios ............................................................................................................................................................. 439
Exerccio 9-1: Criando uma Thread e Colocando-a em Suspenso .............................................................. 438
Exerccio 9-2: Sincronizando um Bloco de Cdigo ..................................................................................... 439

XVIII

Certificao Sun para Programador JAVA 6 Guia de Estudo

CAPTULO 10 - DESENVOLVIMENTO ................................................................ 441


Objetivos para a Certificao ..................................................................................................... 442
Usando os Comandos javac e java (Objetivos 7.1, 7.2 e 7.5 do Exame) ............................................ 442
Compilando com javac ..................................................................................................................................................... 442
Compilando com -d .............................................................................................................................. 442
Iniciando Aplicativos com java .......................................................................................................................................... 444
Usando as Propriedades do Sistema ........................................................................................................ 444
Manipulando Argumentos da Linha de Comando ...................................................................................... 445
Procurando por Outras Classes ........................................................................................................................................ 445
Declarando e Usando Classpaths ............................................................................................................ 446
Pacotes e a Procura ............................................................................................................................... 446
Caminhos Relativos e Absolutos .............................................................................................................. 448

Objetivo para a Certificao ...................................................................................................... 449


Arquivos JAR (Objetivo 7.5) ................................................................................................................. 449
Arquivos JAR e Busca ........................................................................................................................................................ 449
Usando .../jre/lib/ext com Arquivos JAR .................................................................................................. 450

Objetivo para a Certificao ...................................................................................................... 451


Usando Importaes Estticas (Objetivo 7.1 do Exame) .................................................................... 451
Importaes Estticas ....................................................................................................................................................... 451
Resumo para a Certificao ......................................................................................................................................... 452
Exerccios Rpidos ....................................................................................................................................................................... 452
Teste Individual .................................................................................................................................................... 453
Respostas ..................................................................................................................................................................................... 459

APNDICE A ........................................................................................................... 461


Requisitos do sistema ............................................................................................................................................................. 462

Instalando e Executando o MasterExam ............................................................................................. 462


MasterExam ..................................................................................................................................................................... 462
Ajuda ...................................................................................................................................................................................... 462
Removendo Instalaes .................................................................................................................................................... 462
Suporte Tcnico ..................................................................................................................................................................... 462
Suporte tcnico da LearnKey ............................................................................................................................................ 462
ndice Remissivo ..................................................................................................................................................................... 463

XIX

Sobre os Colaboradores
Sobre os Autores
Kathy Sierra foi desenvolvedora-lder do exame SCJP para Java 5. Sierra trabalhou como instrutora snior da
Sun e, em 1997, fundou o Javaranch.com, a maior comunidade sobre Java na Internet. Os seus livros
recordistas de vendas sobre Java j receberam vrios prmios da revista Software Development Magazine, e
ela tambm membro-fundador do programa Java Champions da Sun.
Bert Bates tem sido desenvolvedor-lder de vrios exames de certificao da Sun, incluindo o SCJP
para Java 5. Ele tambm moderador de um frum em Javaranch.com, e tem desenvolvido softwares
por mais de 20 anos. Bert co-autor de diversos livros recordistas de vendas sobre Java, e membrofundador do programa Java Champions da Sun.

Sobre a Equipe de Reviso Tcnica


Johannes de Jong tem sido o lder das nossas equipes de reviso tcnica por muito, muito tempo. (Ele tem
mais pacincia do que qualquer pessoa que conhecemos.) Neste livro, ele liderou a maior equipe que j
formamos. Nossos sinceros agradecimentos aos seguintes voluntrios, que foram inteligentes, trabalhadores,
pacientes e muito, muito detalhistas!
Rob Ross, Nicholas Cheung, Jane Griscti, Ilja Preuss, Vincent Brabant, Kudret Serin, Bill Seipel, Jing Yi, Ginu
Jacob George, Radiya, LuAnn Mazza, Anshu Mishra, Anandhi Navaneethakrishnan, Didier Varon, Mary
McCartney, Harsha Pherwani, Abhishek Misra e Suman Das.

Sobre o LearnKey
O LearnKey fornece contedo de aprendizado que respeita o ritmo do aluno, e apresenta solues de
distribuio de multimdia para aprimorar habilidades pessoais e produtividade empresarial. O LearnKey
apresenta a maior biblioteca de contedo de treinamento multimdia existente, a qual fornece aos alunos um
dinmico aprendizado, rico em diversas mdias, como videoclips, udio, grficos totalmente animados e
ilustraes animadas. O site da LearnKey na web www.learnkey.com.

Os Astros da Reviso Tcnica


No sabemos quem trabalhou mais, mas podemos contar
as edies feitas por cada revisor (e o fizemos!) - ento,
na ordem de mais edies feitas, ns orgulhosamente
apresentamos os nossos superastros.
Andrew

Gian

Johannes

Mark

Burk

Bill M.

Jef

Jeroen

Kristin

Mikalai

Devender

Jim

Marcelo

Seema

Marilyn

Valentin

Em primeiro lugar, as honras vo para Kristin Stromberg


- toda vez que voc vir um ponto-e-vrgula sendo usado
corretamente, agradea a Kristin. Em seguida vem Burk
Hufnagel, que consertou mais cdigos do que estamos
dispostos a admitir. Bill Mietelski e Gian Franco Casula
corrigiram todos os tipos de erros que jogamos para eles timo trabalho, pessoal! Devender Thareja certificou-se
de que no estvamos usando gria demais, e Mark
Spritzler manteve o bom humor. Mikalai Zaikin e
Seema Manivannan fizeram importantes correes no
livro todo, e Marilyn de Queiroz e Valentin Crettaz
novamente fizeram um trabalho espetacular (novamente
salvando os nossos pescoos).
Marcelo Ortega, Jef Cumps (outro veterano),
Andrew Monkhouse e Jeroen Sterken completam o
nosso time de superastros - obrigado a todos vocs. Jim
Yingst participou da equipe de criao do exame da
Sun, e nos ajudou a escrever algumas das questes mais
difceis do livro (muahahaha).
Como sempre, toda vez que voc vir uma pgina bem
escrita, agradea aos nossos revisores e, se encontrar um
erro, com toda certeza por culpa dos autores. Ah sim, e
um agradecimento final ao Johannes. Voc demais, cara!

XX

Certificao Sun para Programador JAVA 6 Guia de Estudo

Tropa de Elite da Reviso do Java 6


Visto que o upgrade para o exame Java 6 foi como um ataque pequeno e
cirrgico, decidimos que a equipe de reviso tcnica para a atualizao deste
livro precisava ser criada da mesma forma. Por isso, escolhemos a dedo uma
tropa de elite composta pelos gurus mais experientes do JavaRanch para
fazer a reviso do exame Java 6.
Fred
Marc P.

Nossa eterna gratido vai para Mikalai Zaikin. Mikalai teve um papel
importantssimo no livro Java 5 e voltou a nos ajudar nesta edio para o
Java 6. Tambm precisamos agradecer Volha, Anastasia e Daria por nos
emprestarem o Mikalai. Seus comentrios e informaes nos ajudaram a
tornar este livro muito melhor. Obrigado, Mikalai!
Marc Peabody merece agradecimentos especiais pela ajuda em dose
dupla! Alm de nos auxiliar com o novo exame SCWCD da Sun, Marc
trouxe um grande nmero de informaes para este livro garantiu o leite
das nossas crianas, Marc! (Por sinal, demoramos muito tempo para
descobrir que Marc, Bryan Bashan e Bert compartilham a mesma paixo
pelo jogo de frisbee).

Mikalai

Marc W.

Como muitos de nossos revisores, Fred Rosenberger dedica


voluntariamente uma imensa quantidade de tempo moderao de fruns
no JavaRanch e, mesmo assim, encontrou um horrio para nos ajudar com
este livro. Stacey e Olvia, vocs tambm merecem um muito obrigado por
terem nos emprestado o Fred por um tempo.
Marc Weber moderador de alguns dos fruns mais movimentados do
JavaRanch. Marc conhece coisas dele e resolveu problemas bem
complicados que estavam escondidos neste livro. Agradecemos a ajuda de
Marc, mas precisamos avis-los para tomar cuidado, pois ele tem um feiser!

Christophe

Agradecimentos

Por fim, mandamos agradecemos a Christophe Verre se conseguirmos


encontr-lo. Parece que Christophe modera seus fruns no JavaRanch de
vrios lugares ao redor do mundo, incluindo Frana, Pas de Gales e, mais
recentemente, Tquio. Em mais de uma ocasio, ele nos protegeu da nossa
prpria falta de organizao. Obrigado por sua pacincia, Christophe!
importante saber que todos esses caras doaram os honorrios recebidos
como revisores deste livro para o JavaRanch! A comunidade do site agora
est em dbito com vocs.

Kathy e Bert gostariam de agradecer as pessoas a seguir:

Todas as pessoas incrivelmente esforadas da Osborne: Tim Green, Jim Kussow, Jody McKenzie e Jennifer Housh por
toda a ajuda e por serem to compreensivas e pacientes bem, nem to pacientes assim mas muito profissionais e o
grupo mais agradvel de pessoas com quem se poderia esperar trabalhar.

Os nossos anjos Solveig Haugland e Midori Batten, por virem nos salvar quando realmente estvamos em apuros!

Alguns dos profissionais de software e amigos que nos ajudaram nos dias iniciais: Tom Bender, Peter Loerincs, Craig
Matthews, Dave Gustafson, Leonard Coyne, Morgan Porter e Mike Kavenaugh.

Acima de tudo, a maravilhosa e talentosa equipe de certificao da Sun Educational Services, e para todos os generosos e
pacientes moradores do javaranch e a pessoa mais persistente que j conhecemos quando se trata de concluso, Evelyn
Cartagena (parabns pelo recm-nascido, Evelyn).
Nossos melhores amigos e especialistas em Java, Bryan Basham, Kathy Collina e Simon Roberts.

As crianas, Eden e Skyler, por ficarem horrorizadas que os adultos fora da escola estivessem estudando tanto para
um exame.
O chefe do Javaranch Trail, Paul Wheaton, por manter a melhor comunidade Java da Internet.

Todos os outros instrutores antigos e atuais de Java da Sun Ed por ajudarem a tornar o aprendizado dessa linguagem
uma experincia divertida, incluindo (para nomear apenas alguns): Alan Petersen, Jean Tordella, Georgianna Meagher,
Anthony Orapallo, Jacqueline Jones, James Cubeta, Teri Cubeta, Rob Weingruber, John Nyquist, Asok Perumainar,
Steve Stelting, Dave Zaffery, Kimberly Bobrow, Keith Ratliff e o conhecedor de Java mais dedicado e inspirador do
planeta, Jari Paukku.
Darren e Mary, obrigado por nos manter sos e por nos ajudar com os nossos novos amigos peludos, Andi e Kara.

Finalmente, Eric e Beth Freeman pelo incentivo contnuo.

Introduo

XXI

Prefcio
O principal objetivo deste livro ajud-lo a se preparar para o exame de certificao SCJP da Sun Microsystem para Java 6 ou
Java 5 e passar nele. As provas para o Java 6 e o Java 5 so praticamente idnticas em termos de contedo, e ambas so bem
mais amplas que a verso anterior, o exame para Java 1.4. Ao longo deste livro, ser usada como exemplo a prova para Java
6, mas lembre-se de que, fora a adio da classe System.Console e das colees Navigable, as provas para o Java 5 e o Java 6
tratam dos mesmos assuntos. recomendvel fazer a prova para Java 6 ao invs do exame para Java 5, mas caso voc decida
fazer a prova para o Java 5, este livro tambm ser til. Os novos objetivos da prova abordam por alto vrias das APIs mais
usadas no Java. A expresso principal aqui por alto. Os criadores da prova acreditam que passar neste exame significa que
o candidato compreende os pontos bsicos das APIs, como os relacionados a E/S de arquivos e expresses regulares. Este livro
segue fielmente os padres da prova, tanto em termos de amplitude quanto de profundidade. Por exemplo, aps ler este livro,
voc provavelmente no ter se tornado o mestre das expresses regulares, mas se estudar o material e fizer bem os simulados,
conseguir entender o bsico sobre o assunto e far uma boa prova. Aps terminar este livro, voc poder ter certeza de ter
estudado todos os objetivos que a Sun definiu para a prova.

Neste Livro
Este livro organizado para otimizar o aprendizado dos tpicos abordados na prova SCJP para Java 6. Sempre que possvel,
os captulos foram organizados de acordo com os objetivos da Sun. Contudo, s vezes foi preciso unir objetivos ou repeti-los
parcialmente de modo a apresentar os tpicos em uma ordem mais adequada assimilao do contedo.

Em Cada Captulo
Ns criamos um conjunto de blocos constituintes dos captulos que chamaro sua ateno para itens
importantes, reforaro pontos de destaque e fornecero dicas teis para a hora do exame. Veja o que voc
encontrar em cada captulo:

Cada captulo comear com os Objetivos para a Certificao o que voc precisa saber para passar na
seo do exame que tratar do tpico referente ao captulo. Os objetivos sero identificados dentro do
captulo por seus cabealhos, portanto, voc sempre saber qual o objetivo quando o vir!

A notas Observao para o exame chamaro a ateno para informaes e possveis armadilhas relacionadas
ao exame. Uma vez que estvamos na equipe que criou o exame, sabemos pelo que voc vai passar!

As notas Ao trabalho descrevero aspectos prticos de tpicos da certificao que podem no aparecer no
exame, mas que sero teis no mundo real.

Os Exerccios Rpidos foram includos no decorrer dos captulos. Eles o ajudaro a aprimorar as aptides

que possivelmente sero enfocadas no exame. No se limite a ler os exerccios! Eles fornecem a prtica na
execuo com a qual voc ter que estar familiarizado. Aprender fazendo uma maneira eficaz de
aumentar sua capacidade.

A seo Na Sala de Aula descrever as questes que surgem com mais freqncia em cenrios de

treinamento em salas de aula. Essas barras laterais lhe daro uma perspectiva valiosa sobre tpicos
relativos certificao e aos produtos. Elas ressaltaro alguns dos problemas mais comuns e confusos que
os alunos encontram quando fazem um curso de Java.

P&R

O Resumo para a Certificao uma reviso sucinta do captulo e uma reiterao dos pontos
importantes relacionados ao exame.

O Exerccio Rpido no final de cada captulo uma lista de verificao com os principais pontos do
captulo. Pode ser usado para uma reviso de ltima hora.

O Teste Individual oferece perguntas que simulam os tpicos, a estrutura e a natureza das perguntas

encontradas no exame de certificao. As respostas a essas perguntas, assim como suas explicaes, podem
ser encontradas no final de cada captulo. Ao fazer o Teste Individual, depois da concluso de cada captulo,
voc reforar o que aprendeu nele ao mesmo tempo em que se familiarizar com a estrutura das
perguntas do exame.

Introduo
Organizao
Este livro foi organizado de maneira a servir como um estudo aprofundado sobre o exame de Programador
Certificado pela Sun na Plataforma Java 6 e Java 5 tanto para profissionais experientes na linguagem,

XXII

Certificao Sun para Programador JAVA 6 Guia de Estudo


quanto para os que estiverem nos estgios iniciais de vivncia com as tecnologias Java. Cada captulo
aborda um dos aspectos principais do exame, com nfase em perguntas como por que e como
programar na linguagem Java. O CD junto com o livro contm estudo detalhado dos itens essenciais para
obter uma avaliao positiva no projeto enviado para o exame Sun Certified Java Developer.

O que Esse Livro No


Neste livro voc no encontrar um guia para iniciantes no aprendizado de Java. Todas as suas pginas
so dedicadas somente a ajud-lo a passar nos exames. Se voc for iniciante em Java, sugerimos que
demore algum tempo aprendendo os aspectos bsicos e no passe para esse livro at que saiba como
escrever, compilar e executar programas Java simples. No entanto, no pressupomos nenhum nvel de
conhecimento anterior dos tpicos individuais abordados. Em outras palavras, em todos os tpicos
discutidos (direcionados exclusivamente pelos objetivos reais do exame), partimos da suposio de que
voc ainda no os conhece. Portanto, o consideramos iniciante nos tpicos individuais, mas no na
linguagem Java.
Tambm no pretendemos ao mesmo tempo em que o preparamos para o exame torn-lo um especialista
completo em Java. Esse um guia de estudos para o exame da certificao e sua misso muito clara. Isso no
quer dizer que a preparao para o exame no o ajudar a se tornar um programador Java mais avanado! Pelo
contrrio, mesmo os mais experientes desenvolvedores Java geralmente relatam que o fato de ter que se preparar
para o exame de certificao os tornou programadores mais informados e completos do que seriam sem o estudo
dirigido para o exame.

No CD
Para maiores informaes sobre o CD-ROM., por favor veja o apndice A

Algumas Sugestes
Quando tiver terminado de ler este livro, reserve algum tempo para fazer uma reviso completa. Seria bom se
voc retornasse ao livro vrias vezes e fizesse uso de todos os mtodos que ele oferece para revisar o
material:
1. Reler todos os Exerccios Rpidos, ou fazer com que algum lhe tome a lio. Voc tambm
pode usar os exerccios como forma de fazer um teste rpido antes da prova oficial. Tambm
possvel copiar as informaes dos quadros do livro e o material dos Exerccios Rpidos em fichas,
formando um resumo.
2. Reler todas as notas de Aviso para o Exame. Esses avisos so escritos por autores que ajudaram a criar a
prova. Eles sabem o que voc dever encontrar e quais pontos exigem mais ateno.
3. Refazer os Testes. Correr para os testes logo aps ter lido o captulo uma boa ideia, porque as
perguntas ajudam a reforar o que voc acabou de aprender. Contudo, ainda melhor voltar mais
tarde e fazer todas as perguntas do livro de uma s vez, como se estivesse na prova oficial.
(Quando fizer os testes, marque as respostas em uma folha de papel parte. Assim, ser possvel
revisar as questes quantas vezes precisar at ficar confortvel com o material)
4. Terminar os Exerccios. Eles so projetados para abordar os tpicos da prova e no h forma melhor de
conhecer esses assuntos do que praticando preciso certificar-se de ter entendido os motivos para a
realizao de cada etapa de cada exerccio. Se algum ponto no estiver claro, deve-se reler a seo do
captulo relacionada ao assunto.
5. Escrever muito cdigo Java. Este conselho ser repetido muitas vezes. Quando escrevemos este livro,
criamos centenas de pequenos programas em Java para ajudar em nossa pesquisa. Ouvimos relatos de
centenas de candidatos que passaram na prova e, em quase todos os casos, quem conseguiu as notas
mais altas na prova programou muito enquanto estudava. Vale fazer experincias com as amostras de
cdigo deste livro e criar listas horrorosas de erros de compilao. Em suma: deve-se deixar de lado o
IDE, tirar a ferrugem da linha de comando e no ter medo de escrever cdigo!

Introduo ao Material do Livro


A prova para Sun Certified Java Programmer (SCJP) considerada uma das mais difceis da indstria de TI e
podemos dizer, por experincia prpria, que a maior parte dos candidatos vo fazer a prova sem estarem
preparados. Como programadores, tendemos a aprender apenas o necessrio para terminar o projeto no qual
trabalhamos no momento, geralmente sob a presso de prazos insanos.

Introduo

XXIII

Quem se Importa com Certificaes?


As empresas se importam. Caadores de talento se importam. Os programadores tambm. O exame de
programador da Sun tem sido considerado a certificao que mais se popularizou no universo da informtica e
a quantidade de candidatos que o faz continua a crescer a cada ano. Passar nesse exame provar trs itens
importantes para um empregador atual ou futuro: que voc sabe das coisas; que sabe como estudar e se
preparar para um teste desafiador; e, acima de tudo, que conhece a linguagem Java. Se um empregador tiver
que optar entre um candidato que passou no exame e outro que no tenha passado, ele saber que o
programador certificado no precisar se demorar no aprendizado da linguagem Java.
Mas isso significa que voc realmente poder desenvolver softwares em Java? No necessariamente, mas uma
boa vantagem inicial. Para demonstrar efetivamente sua habilidade no desenvolvimento (em vez de apenas seu
conhecimento da linguagem), voc deve considerar o Exame de Desenvolvedor, do qual receber a tarefa de
criar um programa, do incio ao fim, e envi-lo para um avaliador que o examinar e lhe dar uma nota.

Programa de Certificao da Sun


Atualmente, h oito exames de certificao em Java. Os exames de Associate, Programmer e Developer
esto associados com a Java Standard Edition. Os exames de Web Component, Businee Component, Web
Services e Enterprise Architect esto associados com a Java Enterprise Edition. O exame de Mobile Application est associado com a Java Micro Edition.
Os exames de Associate, Programmer, Web Component, Business Component, Web Services e Mobile Application so exclusivamente de mltipla escolha e do tipo arrastar-e-soltar, e so feitos em um centro de testes,
enquanto os exames Developer e Architect envolvem o envio de um projeto.

A prova para Associate (CX-310-019)


Sun Certified Java Associate (SCJA)
O exame para Associate tem como pblico-alvo candidatos que acabaram de entrar na carreira de
desenvolvimento de aplicaes ou projeto de software usando a tecnologia Java. Este exame avalia o
conhecimento bsico de conceitos de orientao a objeto, UML, linguagem de programao Java e
conhecimentos gerais sobre as Plataformas e Tecnologias Java. Esta prova no tem pr-requisito.

As provas para Programmer (CX-310-065)


Sun Certified Java Programmer (SCJP) for Java 6
O exame para Programmer projetado para testar a compreenso da linguagem de programao Java. Ele
exige conhecimentos detalhados sobre a sintaxe da linguagem, seus principais conceitos e algumas interfaces
comuns para a programao de aplicaes (APIs). Esta prova tambm exige conhecimento intermedirio
sobre conceitos da programao orientada a objeto, mas no avalia assuntos relacionados arquitetura e no
pergunta por que uma abordagem melhor do que outra. Em vez disso, ela pergunta se uma determinada
abordagem funciona em uma situao especfica. Esta prova no exige pr-requisitos. At maio de 2008
estavam disponveis duas verses antigas deste exame, a 1.4 e a 5.0.

A prova para Developer (CX-310-252A CX-310-027)


Sun Certified Java Developer (SCJD)
O exame para Developer comea exatamente onde termina a prova para Programmer. Por isso, exige-se que
o candidato passe no exame para Programmer antes de tentar o Developer. A prova para Developer exige o
desenvolvimento de um programa e a defesa de suas escolhas de projeto, sendo feita para avaliar a
compreenso dos motivos pelos quais certas abordagens so melhores do que outras em determinadas
circunstncias, bem como provar a capacidade de seguir uma especificao e implementar um programa
correto, funcional e amigvel para o usurio.
A prova para Developer tem duas partes: a realizao de um projeto e um exame de acompanhamento. Os
candidatos no tm limite de tempo para terminar o projeto, mas depois do envio deste, os candidatos
devero ir a um centro de exames e fazer uma prova de acompanhamento, projetada principalmente para
validar e verificar que o projeto entregue foi realmente criado e desenvolvido pelo candidato.

XXIV

Certificao Sun para Programador JAVA 6 Guia de Estudo

O Exame Web Component Developer (CX-310-083)


Sun Certified Web Component Developer for Java EE Platform (SCWCD)
O exame de desenvolvedor da Web tem como alvo as pessoas que estiverem usando o JSP (Java Server
Pages) e o servlet da tecnologia Java para criar aplicativos Web. Ele foi baseado nas especificaes do Servlet
e do JSP definidas na Java Enterprise Edition (Java EE). Para fazer este exame, necessrio que o candidato
seja um Sun Certified Programmer.

O Exame Business Component Developer (CX-310-091)


Sun Certified Business Component Developer (SCBCD)
O exame de desenvolvedor de componentes de negcios foi elaborado para os candidatos que estejam
usando a tecnologia Java EJB para criar aplicativos de camada de negcios. O exame se baseia na
especificao EJB definida na Java Enterprise Edition (Java EE). Para fazer este exame, necessrio que o
candidato seja um Sun Certified Java Programmer.

O Exame Web Services Developer (CX-310-220)


Sun Certified Developer for Web Service for Java EE Platform (SCDJWS)
O exame de servios web tem como alvo os candidatos que estejam criando aplicativos com tecnologias Java
EE e Java Web Services Developer Pack. Para fazer este exame, necessrio que o candidato seja um Sun
Certified Java Programmer.

O Exame Architect (CX-310-052, CX-310-301A, CX-310-062)


Sun Certified Enterprise Architect for J2EE Technology (SCEA)
Essa certificao se destina a enterprise architect e, portanto, no requer que o candidato passe no exame
Programmer. O exame Architect tem trs partes: uma prova de mltipla escolha baseada em conhecimentos,
um projeto de arquitetura e um teste de acompanhamento com questes dissertativas. Voc precisa passar na
prova de mltipla escolha antes de se registrar e receber a tarefa do projeto.

O Exame Mobile (CX-310-110)


Sun Certified Mobile Application Developer for Java ME (SCMAD)
O exame de desenvolvedor de aplicativos mveis para candidatos que estejam criando aplicativos para
telefones celulares ou outros dispositivos habilitados para Java. O exame aborda a especificao Java Technology for Wireless Industry (JTWI), a API Wireless Messaging e as APIs Mobile Media. Para fazer este exame,
necessrio que o candidato seja um SCJP.

Fazendo o Exame Programmer


Em um mundo ideal, voc seria avaliado por seu conhecimento efetivo em um assunto e no simplesmente
pelas respostas que deu a vrias perguntas de um exame. Mas a vida no perfeita e nem prtico avaliar o
conhecimento de vrias pessoas individualmente.
Na maioria de seus exames de certificao, a Sun avalia os candidatos usando um servio de teste baseado em
computador e operado pela Sylvan Prometric. Esse servio bem popular na indstria e usado por vrios
programas de certificao de outros fornecedores, incluindo o CNE da Novell e o MCSE da Microsoft. Graas a
grande quantidade de filiais da Sylvan Prometric, os exames podem ser administrados em todo o mundo,
geralmente na mesma cidade do candidato.
Geralmente, os exames da Sylvan Prometric apresentam um funcionamento semelhante para todos os
fornecedores. No entanto, h um fato importante a se conhecer sobre os exames da Sun: eles usam o formato
tradicional de teste da Sylvan Prometric e no o adotado recentemente. Isso d ao candidato uma vantagem,
j que o formato tradicional permite que as repostas sejam revisadas e refeitas durante o teste.

O b spara
e r ov a o
E xame

Muitos candidatos experientes em testes no voltam s respostas para alter-las a menos que tenham
uma boa razo para fazer isso. S altere uma reposta quando achar que pode ter interpretado mal ou
se enganado na primeira leitura que fez de uma pergunta. O nervosismo pode fazer com que voc
encontre uma segunda resposta para cada pergunta deixando a correta de lado.

Introduo

XXV

Para desencorajar a simples memorizao, os exames da Sun apresentam um conjunto potencialmente distinto
de perguntas para candidatos diferentes. Na elaborao do exame, centenas de perguntas so compiladas e
aprimoradas por testadores beta. Desse conjunto volumoso, so extradas as perguntas referentes a cada
objetivo que, posteriormente, so reunidas em vrias verses diferentes do exame.
Cada exame da Sun tem uma quantidade especfica de perguntas (o exame de Programador contm 72
perguntas) e uma durao para o teste (210 minutos para o exame de Programador). Normalmente, o tempo
destinado ao teste generoso. O tempo remanescente sempre exibido no canto da tela de teste, junto com
a quantidade de perguntas que faltam. Se ele expirar durante o exame, o teste ser encerrado e as respostas
incompletas sero consideradas incorretas.
No final do exame, seu teste ser imediatamente avaliado e o resultado exibido na tela. As notas obtidas em
cada assunto tambm sero fornecidas, mas o sistema no indicar que perguntas especficas estavam
incorretas. Um relatrio ser impresso automaticamente na mesa do inspetor para que voc possa arquiv-lo.
A nota do teste transmitida eletronicamente para a Sun.

O b spara
e r ov a o
E xame

Quando voc se sentir confuso ao responder perguntas de mltipla escolha, use seu rascunho
para anotar as duas ou trs respostas que considera as mais provveis e, em seguida, sublinhe
a reposta que acha que possivelmente a correta. Aqui est um exemplo de como ficar seu
rascunho quando voc j tiver percorrido o teste uma vez:
21. B ou C
33. A ou C
Isso ser extremamente til para voc marcar a pergunta e dar prosseguimento.
Posteriormente, poder retornar e resgatar imediatamente seu raciocnio de onde parou.
Empregue essa tcnica para evitar ter que reler e reavaliar as perguntas. Voc tambm ter que
usar seu rascunho em perguntas de cenrio complexo, baseadas em texto, para criar imagens
de modo a compreender melhor a questo. Essa tcnica ser especialmente til se voc tiver
mais facilidade em captar conceitos visualmente.

Formato das Perguntas


Os exames da Sun sobre Java apresentam as perguntas no formato de mltipla escolha ou de arrastar-e-soltar.

Questes de Mltipla Escolha


Em verses anteriores, quando lhe era apresentada uma questo de mltipla escolha, voc no sabia quantas respostas
estavam corretas, porm, a cada verso do exame, as respostas se tornaram mais difceis, de modo que, atualmente, a
pergunta informa quantas respostas devem ser selecionadas. As perguntas do Teste Individual, encontrado no final de cada
captulo, tm quase o mesmo formato, redao e nvel de dificuldade das perguntas do exame real, com duas excees:

Sempre que possvel, as nossas questes NO lhe diro quantas respostas corretas existem (diremos
marque todas as corretas). Faremos isso para ajud-lo dominar o material. Alguns alunos experientes
com testes poderiam eliminar as respostas erradas se soubessem o nmero de respostas corretas.
Tambm possvel, quando voc sabe quantas esto corretas, escolher as respostas mais plausveis. Mas
o nosso trabalho prepar-lo para as dificuldades que encontrar no exame real!

O exame real normalmente numera as linhas de cdigo de cada questo. Ns normalmente no as


numeramos - a principal razo para termos espao para adicionar comentrios onde for necessrio. No
exame real, quando uma listagem de cdigo comear pelo 1, isso indica que se trata de um arquivo-fonte
inteiro. Se a listagem comear por um nmero maior do que 1, significa que se trata de um arquivo-fonte
parcial. Quando se tratar de um arquivo-fonte parcial, assuma sempre que a parte ausente do cdigo est
correta (por exemplo, a no ser que esteja dito explicitamente o contrrio, voc pode assumir que um
arquivo-fonte parcial tem as instrues import e package corretas).

Questes de Arrastar-e-Soltar
Embora muitos outros exames de certificao Java da Sun usem questes de arrastar-e-soltar h vrios anos, esta
a primeira verso do exame SCJP que inclui esse tipo de questo. Como discutimos anteriormente, as

XXVI

Certificao Sun para Programador JAVA 6 Guia de Estudo


questes do exame que voc recebe so sorteadas aleatoriamente, mas voc pode esperar que cerca de 20 a
25% das questes sejam do tipo arrastar-e-soltar.
As questes arrastar-e-soltar normalmente consistem de trs componentes:

Um cenrio: Uma pequena descrio da tarefa que voc dever realizar.

Uma tarefa parcialmente realizada: Uma listagem de cdigo, uma tabela ou uma rvore de diretrios. A
tarefa parcialmente realizada conter espaos em branco, indicados com caixas (normalmente amarelas).
Essas caixas devero ser preenchidas para se completar a tarefa.
Um conjunto de fragmentos representando respostas possveis: Voc clica nos fragmentos
(normalmente caixas azuis) e os arrasta para o espao em branco correto. O cenrio da questo lhe dir se
voc pode reutilizar fragmentos.
A maioria das questes de arrastar-e-soltar ter cerca de 4 a 10 espaos em branco para serem preenchidos, e
normalmente mais fragmentos do que o necessrio (alguns fragmentos so deixados sem utilizao). As
questes de arrastar-e-soltar frequentemente so as mais complexas do exame, e o nmero de possveis
combinaes de respostas as tornam quase impossveis de chutar.

O b spara
e r ov a o
E xame

No que se refere s questes de arrastar-e-soltar, h um grande problema com o software de


teste em muitos dos centros Prometric em todo o mundo. Em geral, o software lhe permite
revisar as questes que j respondeu quantas vezes quiser.
No caso das questes de arrastar-e-soltar, entretanto, muitos candidatos tm relatado que, se eles
pedirem para rever a questo, o software apaga a resposta anterior! CUIDADO! At que esse
problema seja corrigido, recomendamos que voc mantenha uma lista de quais questes so de
arrastar-e-soltar, para que no revise uma sem querer. Outra boa ideia anotar as respostas
desse tipo de questo, de modo que se uma for apagada, ser fcil digitar novamente a resposta.
Isso nos remete a outro problema que os candidatos tm relatado. O centro de teste deveria lhe
fornecer o material necessrio para que voc possa trabalhar nas questes por escrito. Em
alguns casos, os centros forneceram marcadores e quadros inapropriados, por serem pequenos
demais e difceis de usar efetivamente. Recomendamos que voc verifique, antes do dia do exame,
se receber do centro lpis ou caneta e pelo menos algumas folhas de papel em branco.

Dicas para a Hora do Exame


H 72 perguntas no exame 310-065 (Java 6). Voc ter que acertar pelo menos 47 delas para passar acima
de 65 por cento. O tempo para concluso do exame ser de quase trs horas. Essas informaes esto sujeitas
a alteraes. Confirme sempre com a Sun em www.suned.sun.com, antes de prestar o exame.
Voc pode responder as perguntas em qualquer ordem e tambm pode voltar para marcar suas respostas
depois que tiver percorrido o teste. No h penalidades para as respostas erradas, portanto, melhor marcar
uma resposta do que deixar uma pergunta em branco.
Uma estratgia adequada ao fazer o exame percorr-lo uma vez e responder todas as perguntas que souber
de imediato. Em seguida, voc poder voltar e responder as outras. Responder uma pergunta pode fazer com
que se lembre de como responder a anterior.
Seja muito cuidadoso com os exemplos de cdigos. Primeiro, procure erros na sintaxe, conte as chaves, sinais
de ponto e vrgula e parnteses e certifique-se se h a mesma quantidade desses smbolos na abertura e no
fechamento. Procure erros na colocao de letras maisculas e outros problemas de sintaxe antes de tentar
descobrir qual a funo do cdigo.
Muitas das perguntas do exame dependero de mincias da sintaxe. Voc precisar de um conhecimento
consistente da linguagem Java para que seja bem-sucedido.

Dicas que Podem ser Aplicadas no Estudo para o Exame


Antes de tudo, reserve bastante tempo para o estudo. Java uma linguagem de programao complexa e
voc no pode esperar apreender tudo que precisa saber em uma reviso rpida feita em uma nica sesso
de estudo. Trata-se de um campo que vai sendo melhor compreendido com o tempo, atravs do estudo de
um assunto e posterior aplicao do conhecimento. Elabore uma programao de estudo e atenha-se a ela,
mas seja razovel com a carga atribuda, principalmente se estiver estudando ao mesmo tempo em que
executa suas tarefas dirias no trabalho.
Uma tcnica fcil, que pode ser usada nos estudos para os exames de certificao, a dedicao durante 15
minutos dirios. Simplesmente, estude durante um mnimo de 15 minutos todo dia. um compromisso nfimo,

Introduo

XXVII

porm, significativo. Se houver um dia em que voc no consiga se concentrar, ento, pare quando chegar aos
15 minutos. Se em outro dia o estudo fluir muito bem, estude mais. Se a quantidade de dias em que tudo fluir
bem for maior, suas chances de ser bem sucedido sero bastante altas.
altamente recomendvel que voc use cartes pedaggicos ao se preparar para o exame de Programador.
O carto pedaggico simplesmente uma ficha 3X5 ou 4X6 com uma pergunta na frente e a resposta atrs.
Crie voc mesmo esses cartes quando passar por um captulo e inclua qualquer item que considere precisar
de mais memorizao ou tempo de prtica. Com eles, voc pode se auto-avaliar fazendo a leitura da
pergunta, buscando a reposta na memria e depois virando o carto para ver se acertou. Ou pedir a outra
pessoa que o ajude, segurando o carto com o lado da pergunta virado para voc e verificando a reposta em
seguida. A maioria de nossos alunos achou esses cartes extremamente teis, principalmente porque so to
pequenos que enquanto voc estiver estudando, poder lev-los para qualquer lugar. No entanto, melhor
no us-los ao dirigir, exceto quando parado no sinal vermelho. Levamos os nossos para todos os lugares - o
consultrio mdico, restaurantes, teatros, onde puder imaginar.
Os grupos de estudo para a certificao so outro recurso excelente e voc no encontrar uma comunidade
maior ou mais participativa do que nos fruns Big Moose Sallon do javaranch.com. Se tiver uma pergunta
relacionada a este livro, ou a qualquer outro exame simulado com o qual se deparou, ao envi-la para um
frum sobre a certificao voc obter a resposta, quase todos os casos, dentro de um dia, e na maioria das
vezes, em algumas horas. Voc nos encontrar por l (os autores) vrias vezes por semana, ajudando as
pessoas que esto iniciando sua jornada de preparao para o exame. (Voc no conseguir pensar em nada
que soe to bem como a palavra jornada quando estiver se preparando para o exame).
Finalmente, recomendamos que voc escreva vrios pequenos programas em Java! Durante a escrita deste livro, ns
escrevemos centenas de pequenos programas, e se voc der ouvidos ao que dizem os candidatos mais bemsucedidos (tipo aqueles com mdia 98%), eles sempre relatam que escreveram muito cdigo como parte do estudo.

Agendando seu Exame


Os exames so contratados na prpria Sun, mas so agendados diretamente com a Sylvan Prometric. Para
locais fora dos Estados Unidos, o nmero de contato de onde voc estiver poder ser encontrado no site Web
da Sylvan, que fica no endereo http://www.2test.com. Os representantes da Sylvan podero agendar seu
exame, mas no tero informaes sobre os programas de certificao. Perguntas sobre a certificao devem
ser dirigidas para o departamento de Treinamento Internacional da Sun. Esses representantes esto
suficientemente familiarizados com os exames para encontr-los por nome, mas ser melhor se voc tiver o
nmero do exame especfico mo quando falar com eles. Afinal, voc no iria gostar se lhe agendassem e
cobrassem o exame errado.
Os exames podem ser agendados at com um ano de antecedncia, embora isso no seja realmente
necessrio. Geralmente, agend-lo com uma ou duas semanas de antecedncia ser o suficiente para voc
reservar o dia e a hora que preferir. No momento do agendamento, os operadores procuraro centros de teste
em sua rea. Por convenincia, eles tambm podero informar em que centros de teste voc j esteve.
Quando voc se registrar no exame, o nmero de sua identificao ser solicitado. Esse nmero ser usado no
envio dos resultados de seu exame para a Sun. importante que voc use o mesmo nmero de identificao
sempre que se registrar, para que a Sun possa acompanhar seu progresso. As informaes de endereo
fornecidas quando voc se registrar pela primeira vez tambm sero usadas pela Sun para enviar os certificados
e outros materiais relacionados. Nos Estados Unidos, geralmente o nmero de seu seguro social usado como
nmero de identificao. No entanto, a Sylvan pode lhe fornecer um nmero exclusivo de identificao.

Chegando no Local do Exame


Como em qualquer teste, voc ficar tentado a fazer uma reviso rpida na noite anterior. Resista a essa
tentao. Voc j deve conhecer o material a essa altura e se estiver muito sonolento pela manh, no se
lembrar do que estudou. Tenha uma boa noite de sono.
Chegue cedo para o exame; isso lhe dar tempo para relaxar e revisar os fatos essenciais. Aproveite a
oportunidade para rever suas notas. Se estiver cansado de estudar, talvez possa comear seu exame alguns
minutos antes. Por outro lado, no recomendo chegar tarde. Seu teste poderia ser cancelado ou voc poderia
no ter tempo suficiente para concluir o exame.
Quando chegar ao centro de testes, voc ter que se inscrever com o inspetor do exame. Para se inscrever,
ser preciso fornecer dois tipos de identificao. Os tipos aceitos so: identificaes emitidas pelo governo
(por exemplo, passaporte ou habilitao de motorista), cartes de crdito e crachs de empresas. Sua
fotografia deve constar em uma das identificaes. Eles s estaro se certificando se voc no enviou, em seu
lugar, seu vizinho brilhante em Java, a quem pagou para fazer o exame.
Alm de um crebro repleto de informaes, voc no precisar levar nada mais para o exame. Na verdade,
seu crebro ser tudo que poder levar! Todos os testes devem ser feitos com os livros fechados, o que

XXVIII

Certificao Sun para Programador JAVA 6 Guia de Estudo


significa que voc no precisa levar nenhum material de consulta. Tambm no poder levar nenhuma nota
ao sair da sala do exame. O inspetor do teste lhe fornecer papel e caneta. Alguns centros de teste podem
fornecer uma pequena prancheta em vez disso. Recomendamos que voc leve uma garrafa dgua. Duas
horas muito tempo para manter seu crebro em atividade e ele funcionar melhor se estiver bem hidratado.
Deixe seu pager e telefone no carro ou desligue-os. Eles s deixaro a situao mais tensa, j que no so
permitidos na sala do exame e talvez ainda possam ser ouvidos se tocarem fora da sala. Bolsas, livros e outros
materiais devem ser deixados com o inspetor antes que voc entre na sala do exame.
Uma vez na sala de testes, o inspetor se conectar com seu exame e voc ter que verificar se seu nmero
de identificao e o nmero do exame esto corretos. Se for a primeira vez que voc estiver fazendo um
teste da Sun, poder selecionar um tutorial resumido existente no software do exame. Antes de o teste
comear, sero dadas informaes sobre o exame, incluindo a durao, a quantidade de perguntas e a nota
exigida para passar. bastante provvel que seja pedido que voc responda a uma breve pesquisa antes de o
exame propriamente dito comear. Essa pesquisa lhe perguntar sobre o seu nvel de experincia em Java. O
tempo que voc gastar na pesquisa no ser retirado do tempo propriamente dito do seu teste - nem voc
ter mais tempo se responder a pesquisa rapidamente. Lembre-se tambm de que as questes no seu exame
no sero modificadas dependendo das respostas que der pesquisa. Em seguida, o relgio comear a
funcionar e a diverso ter incio.
O software do teste executado no Windows, mas voc no ter acesso a rea de trabalho principal ou a
qualquer acessrio. O exame ser apresentado em tela cheia, com somente uma pergunta por tela. Os botes
de navegao permitiro que voc se mova para baixo ou para cima entre as perguntas. No canto superior
direito da tela, contadores mostraro a quantidade de perguntas e o tempo remanescentes. O mais importante
que haver uma caixa de seleo chamada Mark no canto superior esquerdo da tela essa ser uma
ferramenta importantssima, como explicaremos na seo seguinte.

Tcnicas para Fazer o Teste


Sem um plano de ataque, os candidatos sero subjugados pelo exame ou sero deixados para trs e ficaro
sem tempo. Geralmente, quando estamos familiarizados com o material, o tempo estipulado mais do que
suficiente para a concluso do exame. O truque no perder tempo em algum problema especfico.
O objetivo bvio de um exame que as perguntas sejam respondidas de maneira eficaz, mesmo que outros
aspectos possam distra-lo. Aqui esto algumas dicas para fazer o exame mais eficientemente.

Avalie o Desafio
Primeiro, d uma passada rpida por todas as perguntas do exame. Elimine as fceis, respondendo-as
imediatamente. Leia rapidamente cada pergunta, observando seu tipo e assunto. Como diretriz, tente gastar
menos do que 25 % de seu tempo nessa leitura.
Essa etapa permitir que voc avalie o escopo e a complexidade do exame, lhe ajudando a determinar como
controlar seu tempo. Tambm dar uma ideia de onde encontrar possveis respostas para algumas das
perguntas. s vezes, a redao de uma pergunta pode dar pistas ou trazer a sua memria outra pergunta.
Se voc no estiver totalmente certo de sua resposta, responda assim mesmo, mas marque a caixa Mark para
indicar que deve fazer uma reviso posterior nela. Caso voc fique sem tempo, pelo menos ter fornecido a
primeira reposta que lhe veio cabea, em vez de deix-la em branco.
Em segundo lugar, revise todo o teste, empregando a percepo que obteve na primeira leitura. Por exemplo,
se o teste inteiro parecer difcil, voc saber que no poder gastar mais de cerca de um minuto em cada
pergunta. Divida o tempo em pequenos blocos por exemplo, Preciso responder 10 perguntas a cada 25
minutos.
Nesse estgio, provavelmente ser uma boa ideia saltar as perguntas que exigirem mais tempo, marcando-as
para a prxima leitura. Tente terminar essa fase antes de chegar a 50 ou 60% por cento do tempo do teste.
Em terceiro lugar, leia todas as perguntas que voc marcou para revisar, usando o boto Review Marked da
tela de reviso de perguntas. Essa etapa inclui uma segunda leitura de todas as perguntas cujas respostas
foram dadas sem certeza, assim como responder as que exigem mais tempo e que voc postergou at agora.
Responda como achar melhor esse conjunto de perguntas at que as tenha respondido por completo.
Se voc estiver mais seguro para responder uma pergunta que marcou, desmarque-a agora. Do contrrio,
deixe-a marcada. V trabalhando nas perguntas que exigirem mais tempo, principalmente as que necessitarem
de clculos manuais. Desmarque-as quando estiver satisfeito com a resposta.
Ao final dessa etapa, voc ter respondido todas as perguntas do teste, apesar de no ter certeza em algumas
das respostas. Se ficar sem tempo na prxima etapa no perder pontos pela falta de uma pergunta. Estar
bem se ainda tiver 10 ou 20% de tempo remanescente.

Introduo

XXIX

Revise Suas Respostas


Agora voc est tranquilo! Respondeu a todas as perguntas e est pronto para fazer uma verificao apurada.
Faa outra leitura (sim, mais uma) em todo o teste (embora talvez seja uma boa ideia no revisar as questes
de arrastar-e-soltar!), relendo rapidamente cada pergunta e sua resposta.
Repasse as perguntas cuidadosamente mais uma vez para procurar pegadinhas. Fique particularmente
atento para as que inclurem a opo No compilado. Esteja alerta para pistas de ltima hora. Voc j est
bem familiarizado com quase todas as perguntas a essa altura e pode encontrar algumas pistas que no tinha
visto antes.

O Grande Final
Quando estiver confiante de todas as respostas, termine o exame enviando-o para avaliao. Depois, do que
parecero os 10 segundos mais longos de sua vida, o software do teste retornar sua nota. Geralmente, ela
exibida em um grfico de barras, que mostra a nota mnima exigida, a nota obtida e um indicador PASS/FAIL.
Se voc estiver curioso, poder ver sua mdia de pontos nesse momento. No sero apresentadas as repostas
s perguntas especficas; em vez disso, as perguntas sero reunidas em categorias e sero registrados
resultados para cada categoria. Esse detalhe tambm estar em um relatrio que ter sido impresso
automaticamente na mesa do inspetor do exame.
Quando voc sair do local do exame, ter que deixar seu rascunho para trs ou entreg-lo ao inspetor (Alguns
centros de teste registram o nmero de folhas que so fornecidas, para terem certeza de que todas sero
devolvidas). Em troca, voc receber uma cpia do relatrio do teste.
Esse relatrio ter a marca do centro de testes gravada e voc deve guard-lo em um local seguro.
Normalmente, os resultados so transmitidos automaticamente para a Sun, mas pode ser que voc precise do
relatrio emitido para provar que passou no exame.
Em algumas semanas, a Sun lhe enviar um pacote pelo correio contendo um bonito certificado, um alfinete
de lapela e uma carta. Tambm podem lhe enviar instrues de como contratar o trabalho artstico para
criao de um logotipo que voc poder usar em cartes de visita pessoais.

Fazendo Novamente o Teste


Se voc no passar no exame, no perca a esperana. Tente aproveitar o que ganhou com a experincia e
prepare-se para tentar novamente. Considere-se um pouco mais informado. Voc conhece o formato do teste
um pouco melhor e o relatrio mostrar que reas voc precisa fortalecer.
Se fizer o teste mais uma vez sem demora, provavelmente voc se lembrar de vrias das perguntas que
pode ter errado. Isso o ajudar a concentrar seus estudos na rea certa.
Para concluir, lembre-se que as certificaes da Sun so valiosas, pois so difceis de obter. Afinal, se qualquer
pessoa conseguisse, que valor teria? No final das contas, necessrio uma atitude adequada e muito estudo,
mas voc pode faz-lo!

1
Declaraes e
Controle de
Acesso
Objetivos para a
Certificao:

Declarar Classes e Interfaces


Desenvolver Interfaces e Classes
Abstratas
Usar Primitivos, Arrays, Enums e
Identificadores Legais
Usar Mtodos Staticos, Nomeao
JavaBeans e Var-Args

8 Exerccios Rpidos
P&R

Teste Individual

Captulo 1: Declaraes e Controles de Acesso


Ns partiremos do princpio de que, uma vez que est planejando obter a certificao, voc
j sabe o bsico de Java. Caso seja completamente iniciante na linguagem, este captulo e o
restante do livro ser confuso, ento, certifique-se de que voc sabe pelo menos o bsico
da linguagem antes de mergulhar neste livro. Dito isso, comearemos com uma reviso para
refrescar a sua memria sobre Java, caso tenha se afastado da linguagem por algum tempo.

Reviso de Java
Um programa em Java principalmente uma coleo de objetos falando com outros objetos por meio da
invocao dos mtodos uns dos outros. Cada objeto de um tipo, e esse tipo definido por uma classe ou
uma interface. A maioria dos programas em Java usa uma coleo de objetos de muitos tipos diferentes.
Classe: Um modelo que descreve os tipos de estado e de comportamento que os objetos do seu tipo podem ter.

Objeto: No momento da execuo, quando a Mquina Virtual Java (Java Virtual Machine, ou JVM)
encontra a palavra-chave new, ela usa a classe apropriada para criar um objeto que ser uma instncia
dessa classe. Esse objeto ter o seu prprio estado e ter acesso a todos os comportamentos definidos
pela sua classe.

Estado (variveis de instncias): Cada objeto (instncia de uma classe) ter o seu conjunto nico de
variveis de instncias conforme definido na classe. Coletivamente, os valores atribudos s variveis de
instncias de um objeto compem o estado do objeto.

Comportamento (mtodos): Quando um programador cria uma classe, ele cria mtodos para essa
classe. nos mtodos que a lgica da classe armazenada. Nos mtodos, o verdadeiro trabalho
realizado. neles que os algoritmos so executados e que os dados so manipulados.

Identificadores e Palavras-chave
Todos os componentes de Java dos quais acabamos de falar classes, variveis e mtodos precisam de
nomes. Em Java, esses nomes so conhecidos como identificadores e, como seria de se esperar, existem regras
dizendo como devem ser os identificadores Java permitidos. Independentemente do que permitido, no
entanto, os programadores Java (e a Sun) criaram convenes para a nomeao de mtodos, variveis e classes.
Como todas as linguagens de programao, o Java tem um conjunto de palavras-chaves internas. Essas
palavras-chave no podem ser usadas como identificadores. Mais adiante neste captulo, veremos os
detalhes sobre essas regras e convenes de nomeao, e sobre as palavras-chave Java.

Herana
Fundamental para Java e outras linguagens orientadas a objetos (00) o conceito de herana, que permite
ao cdigo definido em uma classe ser reutilizado em outras classes. Em Java, voc pode definir uma
superclasse geral (mais abstrata), e depois estend-la com subclasses mais especficas. A superclasse no
sabe nada sobre as classes que herdam dela, mas todas as subclasses que herdam da superclasse precisam
declarar explicitamente a relao de herana. Uma subclasse que herda de uma superclasse recebe
automaticamente as variveis de instncias acessveis e os mtodos definidos pela superclasse, mas
tambm livre para substituir mtodos da superclasse para definir comportamentos mais especficos.
Por exemplo, uma superclasse Carro poderia definir mtodos gerais comuns a todos os automveis, mas
uma subclasse Ferrari poderia substituir o mtodo acelerar().

Interfaces
Um poderoso companheiro da herana o uso das interfaces. A interface uma espcie de superclasse
100% abstrata que define os mtodos que uma subclasse deve suportar, mas no como esse suporte deve ser
implementado. Em outras palavras, uma interface Animal poderia declarar que todas as classes de implementao
de Animal devem ter um mtodo comer(), mas a interface Animal no fornece nenhuma lgica para o mtodo
comer(). Isso significa que fica a cargo das classes que implementam a interface Animal a definio do cdigo
para como cada tipo particular de Animal se comporta quando o seu mtodo comer() invocado.

Encontrando Outras Classes


Como veremos mais adiante no livro, uma boa ideia manter a coeso das suas classes. Isso significa
que cada classe deve ter um conjunto bem definido de responsabilidades. Por exemplo, se fosse criar
um programa de simulao de um zoolgico, voc representaria javalis com uma classe e visitantes do
zoolgico com outra. Alm disso, voc poderia ter uma classe Tratador de Animais, uma classe Vendedor
de Pipoca, e assim por diante. A questo que voc no deve ter uma classe que tenha comportamentos
de Javali e Vendedor de Pipoca ao mesmo tempo (falaremos mais sobre isso no Captulo 2).

Identificadores Legais (Objetivo 1.3 e 1.4 do Exame) 3


At mesmo programas Java simples usam objetos de muitas classes diferentes: algumas que voc criou e
algumas criadas por outros (tais como as classes Java API da Sun). O Java organiza as classes em pacotes e
usa declaraes import para dar aos programadores uma forma consistente de gerenciar a nomeao das
classes de que precisam e o acesso a elas. O exame aborda vrios conceitos relacionados aos pacotes e ao
acesso s classes; exploraremos os detalhes neste e em outros captulos.

Objetivo para a Certificao

Identificadores e JavaBeans (Objetivos 1.3 e 1.4)


1.3 Desenvolver cdigo que declare, inicialize e use primitivos, arrays, enums e objetos como variveis
estticos, de instncia e locais. Alm disso, usar identificadores legais para nomes de variveis.
1.4 Desenvolver cdigo que declare mtodos estticos e no estaticos e, se apropriado, usar nomes de
mtodos que obedeam aos padres de nomeao JavaBeans. Alm disso, desenvolver cdigo que declare e
use uma lista de argumentos de extenso varivel.
Lembre-se de que, quando listamos um ou mais Objetivos para a Certificao no livro, como acabamos
de fazer, isso significa que as sees seguintes abordaro pelo menos parte desses objetivos. Alguns
objetivos sero abordados em vrios captulos diferentes, de modo que voc ver o mesmo objetivo
em mais de um lugar do livro. Por exemplo, esta seo cobre declaraes, identificadores e nomeao
JavaBeans, mas o uso do que voc vai declarar ser abordado em captulos posteriores.
Assim, comearemos com os identificadores Java. Os trs aspectos dos identificadores Java que abordaremos aqui so:
Identificadores Legais: As regras que o compilador usa para determinar se um dado nome legal.

Convenes de Cdigo Java da Sun: As recomendaes da Sun para nomeao de classes, variveis e
mtodos. Normalmente obedecemos a esses padres em todo o livro, exceto quando estivermos tentando
lhe mostrar como seria uma questo difcil do exame. No lhe sero feitas perguntas sobre as Convenes
de Cdigo Java, mas recomendamos enfaticamente que os programadores as usem.
Padres de Nomeao JavaBeans: Os requisitos de nomeao da especificao JavaBeans. No
preciso estudar a especificao JavaBeans para o exame, mas voc precisa saber algumas regras bsicas de
nomeao JavaBeans que abordaremos neste captulo.

Identificadores Legais
Tecnicamente, os identificadores legais devem ser compostos apenas de caracteres Unicode, nmeros, smbolos
de moedas e caracteres de conexo (como underscores). O exame no mergulha nos detalhes de quais faixas
do conjunto de caracteres Unicode qualificam como letras e dgitos. Assim, por exemplo, voc no precisar
saber que os dgitos em Tibetano vo de \u0420 at \u0f29. Eis aqui as regras que voc precisa saber:
Os identificadores devem comear com uma letra, um cifro ($) ou um caracter de conexo, como o
underscore ( _ ). Os identificadores no podem comear com um nmero!

Depois do primeiro caracter, os identificadores podem conter qualquer combinao de letras, caracteres
de moedas, caracteres de conexo ou nmeros.

Na prtica, no h limite para o nmero de caracteres que um identificador pode conter.

No se pode usar uma palavra-chave Java como identificador. A Tabela 1-1 lista todas as palavras-chave
Java, incluindo uma novidade da verso 5.0, enum.
Os identificadores em Java so case-sensitive; foo e Foo so dois identificadores diferentes.

Seguem alguns exemplos de identificadores legais e ilegais; primeiro, identificadores legais:


int _a;
int $c;
int ______2_w;
int _$;
LQWWKLVBLVBDBYHU\BGHWDLOHGBQDPHBIRUBDQBLGHQWLHU

Os seguintes so ilegais (agora voc j sabe o por qu):


int :b;
int -d;

Captulo 1: Declaraes e Controles de Acesso


int e#;
int .f;
int 7g;

Tabela 1-1 Lista Completa de Palavras-Chave Java (assert adicionada em 1.4, enum adicionada em 1.5)
abstract

boolean

break

byte

case

catch

char

class

const

continue

default

do

HOVH

H[WHQGV

QDO

QDOO\

RDW

for

goto

if

implements

import

instanceof

int

interface

long

native

new

package

private

protected

public

return

short

static

strictfp

super

switch

synchronized

this

throw

throws

transient

try

void

volatile

while

assert

enum

GRXEOH

Convenes de Cdigo Java da Sun


Pelas estimativas da Sun, ao longo da vida til de um cdigo padro, 20% do esforo ser despendido na
criao e no teste originais do cdigo, e 80% do esforo ser despendido na manuteno e nas melhorias
subsequentes do cdigo. Concordar com um conjunto de padres e program-lo ajuda a diminuir o
esforo envolvido em testar, fazer a manuteno e melhorar qualquer cdigo. A Sun criou um conjunto de
padres de programao para Java e publicou esses padres em um documento inteligentemente chamado
de Convenes de Cdigo Java, o qual voc pode encontrar em java.sun.com. Trata-se de um timo
documento, curto e fcil de ler, que recomendamos enfaticamente.
Dito isso, voc ver que muitas das questes do exame no seguem as convenes de cdigo, devido
s limitaes do programa de provas que usado para ministrar o exame internacionalmente. Uma das
boas coisas sobre as certificaes da Sun que os exames so administrados uniformemente em todo
o mundo. Para se conseguir isso, as listagens de cdigos que voc ver no exame real frequentemente
so bem bagunadas, e no seguem os padres de cdigo da Sun. Para prepar-lo para o exame, ns
frequentemente iremos apresentar listagens de cdigos com uma aparncia igualmente bagunada, usando
apenas dois espaos de pargrafo em vez dos quatro espaos do padro Sun.
Ns tambm bagunaremos nossas chaves de forma artificial, e, em alguns casos, colocaremos vrias
declaraes na mesma linha... oh no! Por exemplo:
1. class Wombat implements Runnable {
2.

private int i;

3.

public synchronized void run() {

4.

if (i%5 != 0) { i++; }

5.

for(int x=0; x<5; x++, i++)

6.

{ if (x > 1) Thread.yield(); }

7.
8

System.out.print(i + );
}

9. public static void main(String[] args) {


10.

Wombat n = new Wombat();

11.

for(int x=100; x>0; --x) {

new Thread(n).start(); }

12. } }

Considere-se avisado - voc ver vrias listagens de cdigos, questes simuladas e questes de exames
reais que sero doentias e incompreensveis dessa maneira. Ningum quer que voc escreva seu cdigo
desse jeito. Nem o seu empregador, nem os seus colegas de trabalho, nem ns, nem a Sun e nem a equipe
de elaborao do exame! Esse tipo de cdigo foi criado apenas para que conceitos complexos pudessem
ser testados usando-se uma ferramenta de provas universal. O nico padro que seguido tanto quanto
possvel no exame real o dos padres de nomeao. Eis os padres de nomeao recomendados pela Sun,
e que usamos no exame e na maior parte do livro:

Convenes de Cdigo Java Sun (Objetivo 1.3 e 1.4 do Exame)

Classes e interfaces: A primeira letra deve ser maiscula e, se vrias palavras forem escritas juntas para
formar o nome, a primeira letra de cada palavra interna deve ser maiscula (um formato chamado em
ingls de camelCase). Para classes, os nomes devem normalmente ser substantivos. Por exemplo:
Dog // Cachorro
Account // Conta
PrintWriter // Impressora

Para interfaces, os nomes devem normalmente ser adjetivos, como:


Runnable //Executvel
Serializable //Serializvel

Mtodos: A primeira letra deve ser minscula, e depois as regras camelCase normais devem ser usadas.
Alm disso, os nomes devem normalmente ser pares de verbo-substantivo. Por exemplo:
getBalance // obterBalano
doCalculation // fazerClculo
VHW&XVWRPHU1DPHGHQLU1RPH'R&OLHQWH

Variveis: Como nos mtodos, o formato camelCase deve ser usado, comeando com uma letra minscula. A Sun recomenda usar nomes curtos e significativos, o que nos parece uma boa idia. Alguns exemplos:
buttonWidth // LarguraDoBoto
accountBalance // balanoDaConta
myString //minhaString

Constantes: As constantes Java so criadas marcando-se variveis como static e final. Elas devem
ser nomeadas usando-se letras maisculas com caracteres underscore como separadores:
MIN_HEIGHT // ALTURA_MINIMA

Padres JavaBeans
A especificao JavaBeans foi criada para ajudar os desenvolvedores a criarem componentes Java que possam ser
facilmente usados por outros desenvolvedores em uma ferramenta de Ambiente de Desenvolvimento Integrado
(Integrated Development Environment, ou IDE), como o Eclipse ou o NetBeans. Como um programador Java,
voc desejar usar componentes da API Java, mas seria excelente se voc pudesse tambm comprar o componente
Java que quisesse no Mercado Beans, aquela loja de software que fica na sua rua. E, depois de encontrar os
componentes, voc gostaria de poder acess-los atravs de uma ferramenta de desenvolvimento de forma tal que
no precise escrever todo o seu cdigo do zero. Ao usar regras de nomeao, a especificao JavaBeans ajuda a
garantir que as ferramentas podero reconhecer e usar componentes criados por diferentes desenvolvedores. A API
JavaBeans um tanto complexa, mas voc s precisar estudar alguns fundamentos para o exame.
Primeiramente, JavaBeans so classes Java que tm propriedades. Para os nossos propsitos, pense nas
propriedades como variveis de instncias private. Uma vez que so private, a nica maneira pela qual
podem ser acessadas de fora da sua classe atravs de mtodos da classe. Os mtodos que modificam
o valor de uma propriedade so chamados mtodos setter, e os mtodos que obtm o valor de uma
propriedade so chamados mtodos getter. As regras de nomeao JavaBean que voc precisar saber para
o exame so as seguintes:

Regras de Nomeao de Propriedades JavaBean

Se a propriedade no for booleana, o prefixo do mtodo getter deve ser get. Por exemplo,
getSize() um nome getter JavaBeans vlido para uma propriedade chamada size. Tenha em
mente que voc no precisa ter uma varivel chamada size (embora alguns IDEs vo esperar que voc
tenha). O nome da propriedade inferido a partir dos getters e setters, e no atravs de quaisquer
variveis da sua classe. O que voc ir retornar a partir de getSize() fica a seu critrio.

Se a propriedade for booleana, o prefixo do mtodo getter ou get ou is. Por exemplo, tanto
getStopped() quanto isStopped() so nomes JavaBeans vlidos para uma propriedade booleana.
O prefixo do mtodo setter deve ser set. Por exemplo, setSize() o nome JavaBean vlido
para uma propriedade chamada size (tamanho, em ingls).

Para completar o nome de um mtodo getter ou setter, deve-se mudar a primeira letra do nome
da propriedade para maiscula e depois juntar a ela o prefixo adequado (get, is ou set).

As assinaturas de mtodos setter devem ser marcadas como public, com um tipo de retorno void
e um argumento que represente o tipo da propriedade.

Captulo 1: Declaraes e Controles de Acesso


As assinaturas de mtodos getter devem ser marcadas como public, no usar argumentos e ter um
tipo de retorno que combine com o tipo do argumento do mtodo setter para a propriedade em questo.
Em segundo lugar, a especificao JavaBean tem suporte a eventos, os quais permitem aos componentes
notificarem uns aos outros quando algo acontece. O modelo de eventos geralmente usado em aplicaes
GUI quando um evento, como um clique do mouse, comunicado para muitos outros objetos que possam
ter coisas a fazer quando ocorre um clique do mouse. Os objetos que recebem a informao de que ocorreu
um dado evento so chamados de listeners. Para o exame, voc precisa saber que os mtodos usados para
adicionar ou remover listeners de um evento devem tambm seguir padres de nomeao JavaBean:

Regras de Nomeao de Listeners JavaBean

Os nomes de mtodos listeners usados para registrar um listener com uma fonte de eventos devem usar
o prefixo add, seguido do tipo do listener. Por exemplo, addActionListener() um nome vlido
para um mtodo que uma fonte de eventos dever permitir a outros registrarem para eventos Action.
Nomes de mtodos listeners usados para remover (desregistrar) um listener devem usar o prefixo
remove, seguido do tipo do listener (usando-se as mesmas regras que o mtodo add de registro).

O tipo de listener a ser adicionado ou removido deve ser passado como o argumento para o mtodo.
Os nomes de mtodos listener devero terminar com a palavra Listener.
Alguns exemplos de assinaturas de mtodos JavaBean vlidas:
public void setMyValue(int v)
public int getMyValue()
public boolean isMyStatus()
public void addMyListener(MyListener m)
public void removeMyListener(MyListener m)

Alguns exemplos de assinaturas de mtodos JavaBean invlidas:


void setCustomerName(String s)

// precisa ser public

public void modifyMyValue(int v)

// no se pode usar modify

public void addXListener(MyListener m)

// erro de tipo de listener

Observao
para o

E xame

O objetivo s diz que voc precisa saber os identificadores legais para nomes de variveis,
mas as regras so as mesmas para TODOS os componentes Java. Assim, lembre-se de que um
identificador legal para uma varivel tambm legal para um mtodo ou uma classe. Entretanto, voc deve distinguir entre os identificadores legais e as convenes de nomeao, tais
como os padres JavaBeans, que indicam como um determinado componente Java deve ser
nomeado. Em outras palavras, voc deve ser capaz de reconhecer que um dado identificador
legal mesmo que ele no se conforme a padres de nomeao. Se a questo do exame estiver
lhe perguntando sobre convenes de nomeao e no somente se um dado identificador ir
compilar os JavaBeans sero mencionados explicitamente.

Objetivo para a Certificao

Declarar Classes (Objetivo l.1 do Exame)


1.1 Desenvolver cdigo que declare classes (incluindo classes abstractas e todas as formas de classes aninhadas),
interfaces e enums, e incluir o uso apropriado de declaraes package e import (incluindo importaes estticas).
Ao escrever cdigo em Java, voc est escrevendo classes ou interfaces. Dentro dessas classes, como voc sabe,
existem variveis e mtodos (alm de algumas outras coisas). O modo como voc declara as suas classes, mtodos
e variveis afeta dramaticamente o comportamento do seu cdigo. Por exemplo, um mtodo public pode ser
acessado a partir do cdigo que esteja rodando em qualquer parte da sua aplicao. No entanto, se voc marcar
esse mtodo como private, ele desaparecer de todos os radares (exceto o da classe na qual foi declarado).
Para este objetivo, estudaremos as formas pelas quais voc pode declarar e modificar (ou no) uma classe. Voc
perceber que abordaremos os modificadores em um nvel extremo de detalhe, e, embora saibamos que voc

Regras de Declarao para Arquivos-Fonte (Objetivo 1.1 do Exame) 7


j est familiarizado com eles, comearemos pelo bsico. A maioria dos programadores Java pensa que sabe como
todos os modificadores funcionam, mas, ao examinar cuidadosamente a questo, descobre que no sabem (ou
pelo menos no no nvel exigido pelo exame). Existem sutis distines em toda parte, ento voc precisa ter certeza
absoluta de que domina totalmente todos os assuntos dos objetivos desta seo antes de fazer o exame.

Regras de Declarao para Arquivos-Fonte


Antes de mergulharmos nas declaraes de classes, faamos uma breve reviso das regras associadas com a
declarao de classes, declaraes import e declaraes package em um arquivo-fonte:
S pode haver uma classe public em cada arquivo de cdigo-fonte.

Os comentrios podem aparecer no incio ou no fim de qualquer linha no arquivo do cdigo-fonte; eles
so independentes de quaisquer regras de posicionamento discutidas aqui.
Se houver uma classe public em um arquivo, o nome do arquivo deve ser o mesmo da classe
public. Por exemplo, uma classe declarada como public class Dog { } precisa estar em um
arquivo de cdigo-fonte chamado Dog.java.

Se a classe fizer parte de um pacote, a declarao package deve estar na primeira linha do arquivo do
cdigo-fonte, antes de quaisquer declaraes import que estejam presentes.

Se houver declaraes import, elas devem ficar entre a declarao package (se houver) e a
declarao da classe. Se no houver uma declarao package, ento a(s) declarao(es) import
deve(m) estar na(s) primeira(s) linha(s) do arquivo do cdigo-fonte. Se no houver declaraes
package nem import, a declarao da classe deve estar na primeira linha do arquivo do cdigo-fonte.

As declaraes import e package aplicam-se a todas as classes dentro de um arquivo de cdigofonte. Em outras palavras, no possvel declarar mltiplas classes em um arquivo e t-las em diferentes
pacotes, ou usar diferentes importaes.
Um arquivo pode ter mais de uma classe no-public.

Arquivos que no tenham classes public podem ter um nome que no seja o mesmo de nenhuma
das classes do arquivo.
No Captulo 10, discutiremos mais detalhes sobre as regras envolvidas com a declarao e o uso de
importaes, pacotes e um recurso novo do Java 5, importaes estticas.

Declaraes e Modificadores de Classes


Embora classes aninhadas (frequentemente chamadas de internas ou inner class) caiam no exame,
deixaremos as declaraes de classes aninhadas para o Captulo 8. Voc vai adorar esse captulo. No,
srio, vai mesmo. O cdigo seguinte uma declarao de classe simples:
class MyClass { }

Esse cdigo ir compilar sem problemas, mas voc pode tambm adicionar modificadores antes da
declarao da classe. Os modificadores se dividem em duas categorias:
Modificadores de acesso: public, protected, private.

Modificadores que no se referem a acesso (incluindo strictfp, final e abstract).


Examinaremos os modificadores de acesso primeiro para que voc aprenda como restringir ou permitir
acesso a uma classe que criar. O controle de acesso em Java um pouco complicado porque existem quatro
controles de acesso (nveis de acesso), mas apenas trs modificadores de acesso. O quarto nvel de controle
de acesso (chamado de acesso default ou de pacote) o que voc obtm quando no usa nenhum dos
trs modificadores de acesso. Em outras palavras, toda classe, mtodo e varivel de instncia que voc
declarar tem um controle de acesso, independentemente de voc indicar um explicitamente ou no. Embora
todos os quatro controles de acesso (o que significa todos os trs modificadores) funcionem para a maioria
das declaraes de mtodos e de variveis, uma classe pode ser declarada apenas com acesso public ou
default; os outros dois nveis de controle de acesso no se aplicam para classes, como voc ver adiante.
Java uma linguagem centrada nos pacotes; os desenvolvedores assumiram que, para uma boa organizao e controle
do escopo de nomes, voc preferiria colocar todas as suas classes em pacotes. Eles estavam certos, e voc deve fazer isso
mesmo. Imagine o seguinte pesadelo: trs diferentes programadores, na mesma empresa, mas trabalhando em diferentes
ao
T rabalho partes de um projeto, escrevem cada um uma classe chamada Utilities. Se essas trs classes Utilities no tiverem sido
declaradas em nenhum pacote explcito, e estiverem no classpath, voc no ter nenhuma maneira de dizer ao compilador
ou JVM qual das trs est tentando referenciar. A Sun recomenda que os desenvolvedores usem nomes de domnio
reverso, anexados com o nome da diviso e /ou do projeto. Por exemplo, se o nome do seu domnio for geeksanonymous.

Captulo 1: Declaraes e Controles de Acesso


com, e estiver trabalhando no cdigo do cliente para o programa TwelvePointOSteps, voc daria ao seu pacote um nome
FRPRFRPJHHNVDQRQ\PRXVVWHSVFOLHQW,VVRPRGLFDULDRQRPHGDVXDFODVVHSDUDFRPJHHNVDQRQ\PRXVVWHSVFOLHQW
Utilities. Ainda assim, voc poderia ter colises de nomes dentro da sua empresa, se no inventar os seus prprios esquemas
de nomeao, mas garantidamente no haver colises com classes desenvolvidas fora da sua empresa (assumindo que elas
VHJXHPDFRQYHQomRGHQRPHDomRGD6XQVHHODVQmRR]HUHPEHPFRLVDVEDVWDQWHGHVDJUDGiYHLVSRGHPDFRQWHFHU 

Acesso a Classes
O que significa acessar uma classe? Quando dizemos que o cdigo de uma classe (a classe A) tem acesso a
outra (classe B), isso significa que a classe A pode fazer uma das seguintes coisas:
Criar uma instncia da classe B.

Estender a classe B (em outras palavras, tornar-se uma subclasse da classe B).

Acessar certos mtodos e variveis dentro da classe B, dependendo do controle de acesso desses
mtodos e variveis.
Na prtica, acesso significa visibilidade. Se a classe A no puder ver a classe B, o nvel de acesso dos mtodos
e variveis dentro da classe B no far diferena; a classe A no ter como acessar esses mtodos e variveis.
Acesso Default (Padro) Uma classe com acesso default no tem nenhum modificador precedendo-a
na declarao! Esse o controle de acesso que voc obtm quando no digita um modificador na declarao
da classe. Pense no acesso default como um acesso de nvel de pacote, porque uma classe com acesso
default s pode ser vista por classes de dentro do mesmo pacote. Por exemplo, se a classe A e a classe B
estiverem em pacotes diferentes, e a classe A tiver acesso default, a classe B no ser capaz de criar uma
instncia da classe A, e nem mesmo declarar uma varivel ou tipo de retorno da classe A. Na verdade, a classe B
precisa fingir que a classe A nem sequer existe, ou o compilador ir reclamar. Observe o seguinte arquivo-fonte:
package cert;
class Beverage { }

Agora observe o segundo arquivo-fonte:


package exam.stuff;
import cert.Beverage;
class Tea extends Beverage { }

Como voc pode ver, a superclasse (Beverage) est em um pacote diferente da subclasse (Tea). A declarao
import no alto do arquivo Tea est tentando (cruze os dedos!) importar a classe Beverage. O arquivo
Beverage compila sem problemas, mas, quando tentamos compilar o arquivo Tea, obtemos algo como:
Cant access class cert.Beverage. Class or interface must be public, in same
package, or an accessible member class.
import cert.Beverage;

Tea no compila porque a sua superclasse, Beverage, tem acesso default e est em um pacote diferente.
Existem duas coisas que voc pode fazer para consertar isso. Voc poderia colocar ambas as classes no
mesmo pacote, ou poderia declarar Beverage como public, como descrito na seo seguinte.
Quando voc encontrar uma questo com lgica complexa, certifique-se de olhar os modificadores de acesso
primeiro. Dessa forma, se descobrir uma violao de acesso (por exemplo, uma classe do pacote A tentando
acessar uma classe default do pacote B), voc saber que o cdigo no vai compilar, ento no precisa
nem se dar ao trabalho de tentar entender a lgica. Afinal, voc tem mais o que fazer com seu tempo ao fazer
a prova. Simplesmente marque a resposta A compilao falha e passe para a questo seguinte.
Acesso Public (Pblico) Uma declarao de classe com a palavra-chave public d a todas as classes, de
todos os pacotes, acesso classe pblica. Em outras palavras, todas as classes do Universo Java (JU) tm acesso
a uma classe pblica. No entanto, no se esquea, de que, se uma classe pblica que estiver tentando usar
estiver em um pacote diferente do da classe que est escrevendo, voc ainda precisar importar a classe pblica.
No exemplo da seo anterior, talvez no queiramos colocar a subclasse no mesmo pacote que a
superclasse. Para fazer o cdigo funcionar, precisamos adicionar a palavra-chave public na frente da
declarao da superclasse (Beverage), da seguinte forma:
package cert;
public class Beverage { }

Isso modifica a classe Beverage para que ela se torne visvel a todas as classes em todos
os pacotes. Essa classe agora pode ser instanciada a partir de todas as outras classes, e
qualquer classe est agora livre para subclassific-la (estender a partir dela) a no ser que
a classe esteja marcada tambm com o modificador final. J falaremos sobre isso.

Declaraes e Modificadores de Classes (Objetivo 1.1 do Exame) 9

Outros Modificadores de Classes (No referentes a Acesso)


Voc pode modificar uma declarao de classe usando as palavras-chave QDO, abstract, ou
strictfp. Esses modificadores existem em adio a qualquer controle de acesso existente na classe,
ento voc poderia, por exemplo, declarar uma classe como public e final ao mesmo tempo. Mas no
sempre que voc pode misturar modificadores no referentes a acesso. Voc pode usar strictfp em
combinao com final, por exemplo, mas no deve nunca, jamais, marcar uma classe como final e
abstract ao mesmo tempo. Voc ver por que nas duas prximas sees.
Voc no precisar saber como strictfp funciona, ento nos concentraremos apenas em modificar uma classe
como final ou abstract. Para o exame, voc s precisa saber que strictfp uma palavra-chave e que
pode ser usada para modificar uma classe ou um mtodo, mas nunca uma varivel. Marcar uma classe como
strictfp significa que qualquer cdigo de mtodo na classe se conformar s regras do padro IEEE 754 para
pontos flutuantes. Sem esse modificador, os pontos flutuantes usados nos mtodos podero se comportar de forma
variante conforme a plataforma. Se no declarar a classe como strictfp, ainda assim voc poder obter um
comportamento strictfp para mtodos especficos, declarando o mtodo como strictfp. Se voc no conhece
o padro IEEE 754, agora no o momento para aprend-lo. Voc tem assuntos mais importantes para se preocupar.
Classes Finais (Final) Quando usada na declarao de uma classe, a palavra-chave final significa que
a classe em questo no pode ser subclassificada. Em outras palavras, nenhuma outra classe pode jamais
estender (herdar de) uma classe final, e qualquer tentativa de faz-lo lhe dar um erro de compilao.
Ento por que voc sequer marcaria uma classe como final? Afinal de contas, isso no viola toda a noo
de herana presente nas linguagens orientadas a objetos? Voc s deve marcar uma classe como final se
precisar de uma garantia absoluta de que nenhum dos mtodos dessa classe jamais vai ser substitudo. Caso
seu cdigo seja profundamente dependente da implementao de certos mtodos, usar final lhe dar a
segurana de que ningum poder modificar a implementao sem voc saber.
Voc perceber que muitas classes das bibliotecas fundamentais Java so final. Por exemplo, a classe String
no pode ser subclassificada. Imagine a confuso que ocorreria se voc no pudesse garantir a forma como
um objeto String funcionaria em qualquer sistema que executasse a sua aplicao! Se os programadores
tivessem a liberdade de estender a classe String (e assim colocar as suas novas instncias da subclasse String
onde esperam-se instncias de java.lang.String), a civilizao tal como a conhecemos entraria em colapso.
Assim, use final para segurana, mas apenas quando tiver certeza de que a sua classe final de fato j disse
tudo o que precisa ser dito nos seus mtodos. Marcar uma classe como final significa, na prtica, que a sua
classe nunca ser aprimorada, ou mesmo modificada para uso mais especfico, por outro programador.
Um benefcio de se ter classes no-final neste cenrio: imagine que voc encontrou um problema com
um mtodo em uma classe que est usando, mas no tem o cdigo-fonte. Assim, voc no pode modificar
a fonte para melhorar o mtodo, mas pode estender a classe e substituir o mtodo em questo na sua
nova subclasse, e simplesmente usar a subclasse em todas as ocasies em que a superclasse original for
esperada. No entanto, se a classe for final, ento no h nada que voc possa fazer.
Vamos modificar o nosso exemplo Beverage colocando a palavra-chave final na declarao:
package cert;
SXEOLFQDOFODVV%HYHUDJH^
public void importantMethod() { }
}

Agora, se tentarmos compilar a subclasse Tea:


package exam.stuff;
import cert.Beverage;
class Tea extends Beverage { }

Receberemos um erro como:


&DQWVXEFODVVQDOFODVVHVFODVV
cert.Beverage class Tea extends Beverage{
1 error

Na prtica, voc quase nunca criar uma classe QDO. As classes final acabam com um benefcio fundamental da
programao OO a extensibilidade. Assim, a no ser que voc tenha uma sria preocupao de segurana, assuma que algum dia algum outro programador precisar estender a sua classe. Se no o fizer, o prximo programador que for obrigado a fazer a manuteno do seu cdigo ir lhe perseguir e <insira algo muito assustador aqui>.
Classes Abstratas (Abstract) Uma classe abstract no pode ser instanciada nunca. O seu nico
propsito, misso na vida, raison detre, ser estendida (subclassificada). (Repare, no entanto, que voc pode
compilar e executar uma classe abstract, desde que no tente criar uma instncia dela.) Por que criar uma