Sumário Introdução .......................................................................................................... xvi 1 Schildt_Iniciais.indd v Fundamentos da linguagem Java..................................................................... 1 Origem da linguagem Java ............................................................................................... Qual a relação entre Java, C e C++? ........................................................................ Qual a relação entre Java e C#? ............................................................................... Contribuições da linguagem Java para a Internet............................................................. Applets Java ............................................................................................................. Segurança................................................................................................................. Portabilidade ............................................................................................................ O segredo da linguagem Java: o bytecode ....................................................................... O jargão Java .................................................................................................................... Programação orientada a objetos ..................................................................................... Encapsulamento ....................................................................................................... Polimorfismo ........................................................................................................... Herança .................................................................................................................... Obtendo o Java Development Kit .................................................................................... Um primeiro programa simples ....................................................................................... Inserindo o programa ............................................................................................... Compilando o programa .......................................................................................... Primeiro exemplo de programa linha a linha ........................................................... Tratando erros de sintaxe ................................................................................................. Um segundo programa simples ........................................................................................ Outro tipo de dado ........................................................................................................... 3 4 4 5 5 5 6 6 8 9 10 10 11 11 12 13 13 14 16 17 19 24/02/15 09:08 vi Sumário Tente Isto 1-1 2 Schildt_Iniciais.indd vi Converta galões em litros ............................................................ 20 Duas instruções de controle ............................................................................................. A instrução if ........................................................................................................... O laço for ................................................................................................................. Crie blocos de código....................................................................................................... Ponto e vírgula e posicionamento .................................................................................... Práticas de recuo .............................................................................................................. 21 22 23 25 26 26 Tente Isto 1-2 Melhore o conversor .................................................................... 27 As palavras-chave Java .................................................................................................... Identificadores em Java .................................................................................................... As bibliotecas de classes Java .......................................................................................... Teste do Capítulo 1 .......................................................................................................... 28 29 29 30 Introdução a tipos de dados e operadores ....................................................... 31 Por que os tipos de dados são importantes....................................................................... Tipos primitivos da linguagem Java ................................................................................. Inteiros ..................................................................................................................... Tipos de ponto flutuante .......................................................................................... Caracteres ................................................................................................................ O tipo booleano ................................................................................................................ 32 32 33 35 35 37 Tente Isto 2-1 Qual é a distância do relâmpago? .............................................. 38 Literais ............................................................................................................................. Literais hexadecimais, octais e binários .................................................................. Sequências de escape de caracteres ......................................................................... Literais de strings..................................................................................................... Um exame mais detalhado das variáveis.......................................................................... Inicializando uma variável ....................................................................................... Inicialização dinâmica ............................................................................................. Escopo e tempo de vida das variáveis .............................................................................. Operadores ....................................................................................................................... Operadores aritméticos .................................................................................................... Incremento e decremento......................................................................................... Operadores relacionais e lógicos...................................................................................... Operadores lógicos de curto-circuito ............................................................................... O operador de atribuição .................................................................................................. Atribuições abreviadas ..................................................................................................... Conversão de tipos em atribuições ................................................................................... Convertendo tipos incompatíveis ..................................................................................... Precedência de operadores ............................................................................................... 39 39 40 40 41 42 42 43 45 46 47 48 50 51 51 53 54 56 Tente Isto 2-2 Tabela-verdade para os operadores lógicos............................... 56 Expressões........................................................................................................................ Conversão de tipos em expressões........................................................................... Espaçamento e parênteses ....................................................................................... Teste do Capítulo 2 .......................................................................................................... 58 58 60 60 24/02/15 09:08 Sumário 3 4 Instruções de controle de programa ................................................................ 62 Caracteres de entrada do teclado...................................................................................... A instrução if.................................................................................................................... Ifs aninhados .................................................................................................................... A escada if-else-if ............................................................................................................ A instrução switch............................................................................................................ Instruções switch aninhadas ............................................................................................. 63 64 66 67 68 71 Tente Isto 3-1 Construa um sistema de ajuda Java .......................................... 72 O laço for ......................................................................................................................... Algumas variações do laço for ......................................................................................... Partes ausentes ................................................................................................................. O laço infinito .......................................................................................................... Laços sem corpo............................................................................................................... Declarando variáveis de controle de laço dentro do laço for ........................................... O laço for melhorado ....................................................................................................... O laço while ..................................................................................................................... O laço do-while ................................................................................................................ 74 76 77 78 78 79 79 80 81 Tente Isto 3-2 Melhore o sistema de ajuda Java ............................................... 83 Use break para sair de um laço ........................................................................................ Use break como uma forma de goto ................................................................................ Use continue..................................................................................................................... 86 88 92 Tente Isto 3-3 Termine o sistema de ajuda Java................................................ 93 Laços aninhados ............................................................................................................... Teste do Capítulo 3 .......................................................................................................... 97 98 Introdução a classes, objetos e métodos .......................................................... 100 Fundamentos das classes.................................................................................................. Forma geral de uma classe....................................................................................... Definindo uma classe ............................................................................................... Como os objetos são criados ............................................................................................ As variáveis de referência e a atribuição .......................................................................... Métodos............................................................................................................................ Adicionando um método à classe Vehicle ............................................................... Retornando de um método ............................................................................................... Retornando um valor ........................................................................................................ Usando parâmetros........................................................................................................... Adicionando um método parametrizado a Vehicle .................................................. Tente Isto 4-1 101 102 103 106 106 107 107 110 110 112 114 Crie uma classe de ajuda ............................................................ 116 Construtores ..................................................................................................................... Construtores parametrizados ............................................................................................ Adicionando um construtor à classe Vehicle ................................................................... O operador new revisitado ............................................................................................... Coleta de lixo ................................................................................................................... O método finalize( ) ......................................................................................................... Schildt_Iniciais.indd vii vii 121 122 123 124 125 125 24/02/15 09:08 viii Sumário Tente Isto 4-2 Demonstre a coleta de lixo e a finalização ................................. 126 A palavra-chave this ......................................................................................................... 129 Teste do Capítulo 4 .......................................................................................................... 130 5 Mais tipos de dados e operadores .................................................................... 132 Arrays ............................................................................................................................... 133 Arrays unidimensionais ........................................................................................... 134 Tente Isto 5-1 Classifique um array ................................................................... 137 Arrays multidimensionais ................................................................................................ Arrays bidimensionais ............................................................................................. Arrays irregulares ............................................................................................................. Arrays de três ou mais dimensões ........................................................................... Inicializando arrays multidimensionais ................................................................... Sintaxe alternativa para a declaração de arrays ................................................................ Atribuindo referências de arrays ...................................................................................... Usando o membro length ................................................................................................. Tente Isto 5-2 Uma classe Queue ........................................................................ 146 O laço for de estilo for-each ............................................................................................. Iterando por arrays multidimensionais .................................................................... Aplicando o laço for melhorado .............................................................................. Strings .............................................................................................................................. Construindo strings .................................................................................................. Operando com strings .............................................................................................. Arrays de strings ...................................................................................................... Strings não podem ser alterados .............................................................................. Usando um string para controlar uma instrução switch .......................................... Usando argumentos de linha de comando........................................................................ Os operadores bitwise ...................................................................................................... Os operadores bitwise AND, OR, XOR e NOT ...................................................... Os operadores de deslocamento .............................................................................. Atribuições abreviadas bitwise ................................................................................ Tente Isto 5-3 139 139 140 141 141 142 143 144 150 153 154 155 155 156 158 158 160 161 162 163 167 169 Uma classe ShowBits ................................................................... 169 O operador ? ..................................................................................................................... 172 Teste do Capítulo 5 .......................................................................................................... 174 6 Verificação minuciosa dos métodos e classes .................................................. 175 Controlando o acesso a membros de classes.................................................................... 176 Modificadores de acesso da linguagem Java ........................................................... 177 Tente Isto 6-1 Melhore a classe Queue ............................................................... 181 Passe objetos para os métodos ......................................................................................... Como os argumentos são passados .......................................................................... Retornando objetos .......................................................................................................... Sobrecarga de métodos .................................................................................................... Sobrecarregando construtores .......................................................................................... Schildt_Iniciais.indd viii 182 184 186 188 193 24/02/15 09:08 Sumário Tente Isto 6-2 ix Sobrecarregue o construtor de Queue ....................................... 195 Recursão ........................................................................................................................... 198 Entendendo os membros estáticos ................................................................................... 200 Blocos estáticos ....................................................................................................... 203 Tente Isto 6-3 A classificação rápida .................................................................. 204 Introdução às classes aninhadas e internas ...................................................................... Varargs: argumentos em quantidade variável ................................................................... Aspectos básicos dos varargs................................................................................... Sobrecarregando métodos varargs ........................................................................... Varargs e ambiguidade ............................................................................................. Teste do Capítulo 6 .......................................................................................................... 7 Herança .............................................................................................................. 218 Aspectos básicos de herança ............................................................................................ Acesso a membros e a herança ........................................................................................ Construtores e herança ..................................................................................................... Usando super para chamar construtores da superclasse................................................... Usando super para acessar membros da superclasse ....................................................... Tente Isto 7-1 235 237 239 243 246 248 248 252 256 256 256 257 258 259 Pacotes e interfaces ........................................................................................... 260 Pacotes ............................................................................................................................. Definindo um pacote................................................................................................ Encontrando pacotes e CLASSPATH ...................................................................... Exemplo breve de pacote ......................................................................................... Pacotes e o acesso a membros.......................................................................................... Exemplo de acesso a pacote .................................................................................... Entendendo os membros protegidos ................................................................................ Importando pacotes .......................................................................................................... Biblioteca de classes Java fica contida em pacotes .......................................................... Interfaces .......................................................................................................................... Implementando interfaces ................................................................................................ Usando referências de interfaces...................................................................................... Schildt_Iniciais.indd ix 219 222 225 227 231 Estenda a classe Vehicle .............................................................. 232 Criando uma hierarquia de vários níveis .......................................................................... Quando os construtores são chamados? ........................................................................... Referências da superclasse e objetos da subclasse........................................................... Sobreposição de métodos ................................................................................................. Métodos sobrepostos dão suporte ao polimorfismo ......................................................... Por que sobrepor métodos? .............................................................................................. Aplicando a sobreposição de métodos a TwoDShape ............................................. Usando classes abstratas .................................................................................................. Usando final ..................................................................................................................... A palavra-chave final impede a sobreposição ......................................................... A palavra-chave final impede a herança .................................................................. Usando final com membros de dados ...................................................................... A classe Object................................................................................................................. Teste do Capítulo 7 .......................................................................................................... 8 206 209 210 213 214 216 261 262 263 263 265 266 267 269 270 271 272 276 24/02/15 09:08 x Sumário Tente Isto 8-1 Crie uma interface Queue ........................................................... 277 Variáveis em interfaces .................................................................................................... Interfaces podem ser estendidas ....................................................................................... Métodos padrão das interfaces ......................................................................................... Fundamentos dos métodos padrão ........................................................................... Um exemplo mais prático de um método padrão .................................................... Problemas da herança múltipla ................................................................................ Use métodos static em uma interface............................................................................... Considerações finais sobre os pacotes e interfaces .......................................................... Teste do Capítulo 8 .......................................................................................................... 9 283 284 285 286 287 289 289 290 291 Tratamento de exceções .................................................................................... 292 Hierarquia de exceções .................................................................................................... Fundamentos do tratamento de exceções ......................................................................... Usando try e catch ................................................................................................... Exemplo de exceção simples ................................................................................... Consequências de uma exceção não capturada ................................................................ Exceções permitem que você trate erros normalmente ........................................... Usando várias instruções catch ........................................................................................ Capturando exceções de subclasses ................................................................................. Blocos try podem ser aninhados ...................................................................................... Lançando uma exceção .................................................................................................... Relançando uma exceção......................................................................................... Exame mais detalhado de Throwable .............................................................................. Usando finally .................................................................................................................. Usando throws.................................................................................................................. Três recursos das exceções adicionados recentemente .................................................... Exceções internas da linguagem Java .............................................................................. Criando subclasses de exceções ....................................................................................... 294 294 295 295 297 299 299 300 302 303 304 305 306 308 309 311 313 Tente Isto 9-1 Adicione exceções à classe Queue ............................................... 315 Teste do Capítulo 9 .......................................................................................................... 318 10 Usando I/O ......................................................................................................... 320 I/O Java é baseado em fluxos ........................................................................................... Fluxos de bytes e fluxos de caracteres ............................................................................. Classes de fluxos de bytes................................................................................................ Classes de fluxos de caracteres ........................................................................................ Fluxos predefinidos .......................................................................................................... Usando os fluxos de bytes................................................................................................ Lendo a entrada do console ..................................................................................... Gravando a saída do console ................................................................................... Lendo e gravando arquivos usando fluxos de bytes ......................................................... Gerando entradas em um arquivo ............................................................................ Gravando em um arquivo......................................................................................... Fechando automaticamente um arquivo........................................................................... Lendo e gravando dados binários ..................................................................................... Schildt_Iniciais.indd x 322 322 322 323 324 325 325 327 328 328 332 334 337 24/02/15 09:08 Sumário Tente Isto 10-1 Utilitário de comparação de arquivos...................................... 340 Arquivos de acesso aleatório ............................................................................................ Usando os fluxos baseados em caracteres da linguagem Java ......................................... Entrada do console com o uso de fluxos de caracteres............................................ Saída do console com o uso de fluxos de caracteres ............................................... I/O de arquivo com o uso de fluxos de caracteres ........................................................... Usando um FileWriter ............................................................................................. Usando um FileReader ............................................................................................ Usando os encapsuladores de tipos da linguagem Java para converter strings numéricos...................................................................................... Tente Isto 10-2 xi 341 343 344 347 349 349 350 351 Criando um sistema de ajuda baseado em disco .................... 354 Teste do Capítulo 10 ........................................................................................................ 360 11 Programação com várias threads .................................................................... 362 Fundamentos do uso de várias threads ............................................................................. A classe Thread e a interface Runnable ........................................................................... Criando uma thread .......................................................................................................... Algumas melhorias simples ..................................................................................... Tente Isto 11-1 Estendendo Thread.................................................................... 370 Criando várias threads ...................................................................................................... Determinando quando uma thread termina ...................................................................... Prioridades das threads..................................................................................................... Sincronização ................................................................................................................... Usando métodos sincronizados ........................................................................................ A instrução synchronized ................................................................................................. Comunicação entre threads com o uso de notify( ), wait( ) e notifyAll( ) ....................... Exemplo que usa wait( ) e notify( ) ......................................................................... Suspendendo, retomando e encerrando threads ............................................................... Tente Isto 11-2 363 364 365 368 372 375 378 381 381 384 387 388 393 Use a thread principal ............................................................... 396 Teste do Capítulo 11 ........................................................................................................ 398 12 Enumerações, autoboxing, importação estática e anotações......................... 399 Enumerações .................................................................................................................... Fundamentos da enumeração................................................................................... As enumerações Java são tipos de classe ......................................................................... Métodos values( ) e valueOf( ) ................................................................................ Construtores, métodos, variáveis de instância e enumerações ......................................... Duas restrições importantes ..................................................................................... Enumerações herdam Enum............................................................................................. Tente Isto 12-1 Semáforo controlado por computador .................................... 409 Autoboxing ...................................................................................................................... Encapsuladores de tipos ................................................................................................... Fundamentos do autoboxing ............................................................................................ Autoboxing e os métodos................................................................................................. Autoboxing/unboxing ocorre em expressões ................................................................... Advertência .............................................................................................................. Schildt_Iniciais.indd xi 400 401 403 403 405 407 407 414 414 417 417 419 420 24/02/15 09:08 xii Sumário Importação estática .......................................................................................................... 421 Anotações (metadados) .................................................................................................... 424 Teste do Capítulo 12 ........................................................................................................ 426 13 Tipos genéricos .................................................................................................. 428 Fundamentos dos tipos genéricos .................................................................................... Exemplo simples de genérico .......................................................................................... Genéricos só funcionam com tipos de referência .................................................... Tipos genéricos diferem de acordo com seus argumentos de tipo .......................... Classe genérica com dois parâmetros de tipo .......................................................... A forma geral de uma classe genérica ..................................................................... Tipos limitados ................................................................................................................. Usando argumentos curingas ........................................................................................... Curingas limitados ........................................................................................................... Métodos genéricos ........................................................................................................... Construtores genéricos ..................................................................................................... Interfaces genéricas .......................................................................................................... Tente Isto 13-1 Crie uma fila genérica ............................................................... 451 Tipos brutos e código legado ........................................................................................... Inferência de tipos com o operador losango .................................................................... Erasure ............................................................................................................................. Erros de ambiguidade....................................................................................................... Algumas restrições dos genéricos .................................................................................... Parâmetros de tipos não podem ser instanciados..................................................... Restrições aos membros estáticos............................................................................ Restrições aos arrays genéricos ............................................................................... Restrições a exceções genéricas .............................................................................. Continuando seu estudo sobre genéricos ......................................................................... Teste do Capítulo 13 ........................................................................................................ 14 455 458 459 460 461 461 461 461 463 463 463 Expressões lambda e referências de método ................................................... 465 Introdução às expressões lambda............................................................................. Fundamentos das expressões lambda ...................................................................... Interfaces funcionais ................................................................................................ As expressões lambda em ação................................................................................ Expressões lambda de bloco ............................................................................................ Interfaces funcionais genéricas ........................................................................................ Tente Isto 14-1 466 467 468 470 475 476 Passe uma expressão lambda como argumento ...................... 478 Expressões lambda e a captura de variáveis..................................................................... Lance uma exceção de dentro de uma expressão lambda ................................................ Referências de método ..................................................................................................... Referências a métodos static.................................................................................... Referências a métodos de instância ......................................................................... Referências de construtor ................................................................................................. Interfaces funcionais predefinidas.................................................................................... Teste do Capítulo 14 ........................................................................................................ Schildt_Iniciais.indd xii 429 430 434 434 435 436 436 440 443 445 448 448 483 484 486 486 488 492 495 496 24/02/15 09:08 Sumário 15 xiii Applets, eventos e tópicos diversos .................................................................. 498 Aspectos básicos dos applets ........................................................................................... Organização e elementos essenciais dos applets.............................................................. A arquitetura do applet ............................................................................................ Esqueleto de applet completo .......................................................................................... Inicialização e encerramento do applet ............................................................................ Solicitando atualização .................................................................................................... Método update( ) ..................................................................................................... 499 503 503 504 505 506 507 Tente Isto 15-1 Applet de banner simples .......................................................... 507 Usando a janela de status ................................................................................................. Passando parâmetros para applets .................................................................................... A classe Applet ................................................................................................................ Tratamento de eventos ..................................................................................................... Modelo de delegação de eventos...................................................................................... Eventos ............................................................................................................................. Fontes de eventos ..................................................................................................... Ouvintes de eventos ................................................................................................. Classes de eventos ................................................................................................... Interfaces de ouvintes de eventos ............................................................................ Usando o modelo de delegação de eventos ...................................................................... Tratando eventos do mouse e de seus movimentos ................................................. Applet de evento de mouse simples......................................................................... Mais palavras-chave Java ................................................................................................. Modificadores transient e volatile............................................................................ instanceof ................................................................................................................. strictfp ...................................................................................................................... assert ........................................................................................................................ Métodos nativos ....................................................................................................... Teste do Capítulo 15 ........................................................................................................ 16 511 511 513 515 515 515 516 516 516 517 518 519 519 522 523 523 524 524 525 526 Introdução a Swing ........................................................................................... 528 Origens e filosofia de design de Swing ............................................................................ Componentes e contêineres.............................................................................................. Componentes ........................................................................................................... Contêineres .............................................................................................................. Painéis do contêiner de nível superior ..................................................................... Gerenciadores de leiaute .................................................................................................. Um primeiro programa Swing simples ............................................................................ Primeiro exemplo de Swing linha a linha ................................................................ Use JButton ...................................................................................................................... Trabalhe com JTextField .................................................................................................. Crie um JCheckBox ......................................................................................................... Trabalhe com JList ........................................................................................................... Tente Isto 16-1 530 532 532 533 533 534 535 536 540 544 547 551 Utilitário de comparação de arquivos baseado em Swing ..... 555 Use classes internas anônimas ou expressões lambda para tratar eventos ....................... 560 Crie um applet Swing....................................................................................................... 562 Teste do Capítulo 16 ........................................................................................................ 564 Schildt_Iniciais.indd xiii 24/02/15 09:08 xiv 17 Sumário Introdução a JavaFX......................................................................................... 566 Conceitos básicos de JavaFX ........................................................................................... Os pacotes JavaFX ................................................................................................... As classes Stage e Scene ......................................................................................... Nós e grafos de cena ................................................................................................ Leiautes .................................................................................................................... A classe Application e os métodos de ciclo de vida ................................................ Iniciando um aplicativo JavaFX .............................................................................. Esqueleto de aplicativo JavaFX ....................................................................................... Compilando e executando um programa JavaFX ............................................................ A thread do aplicativo ...................................................................................................... Um controle JavaFX simples: o rótulo............................................................................. Usando botões e eventos .................................................................................................. Aspectos básicos de Event ............................................................................................... Introdução ao controle de botão .............................................................................. Demonstrando o tratamento de eventos e o botão ................................................... Mais três controles JavaFX .............................................................................................. CheckBox ................................................................................................................ Tente Isto 17-1 Use o estado indeterminado de CheckBox .............................. 585 ListView ................................................................................................................... TextField .................................................................................................................. Introdução aos efeitos e transformações .......................................................................... Efeitos ...................................................................................................................... Transformações........................................................................................................ Demonstrando os efeitos e transformações ............................................................. O que há mais? ................................................................................................................. Teste do Capítulo 17 ........................................................................................................ A 586 591 594 594 596 597 600 601 Respostas dos testes ........................................................................................... 603 Capítulo 1: Fundamentos da linguagem Java................................................................... Capítulo 2: Introdução aos tipos de dados e operadores .................................................. Capítulo 3: Instruções de controle de programa .............................................................. Capítulo 4: Introdução às classes, objetos e métodos ...................................................... Capítulo 5: Mais tipos de dados e operadores.................................................................. Capítulo 6: Verificação minuciosa dos métodos e classes ............................................... Capítulo 7: Herança ......................................................................................................... Capítulo 8: Pacotes e interfaces ....................................................................................... Capítulo 9: Tratamento de exceções ................................................................................ Capítulo 10: Usando I/O .................................................................................................. Capítulo 11: Programação com várias threads ................................................................. Capítulo 12: Enumerações, autoboxing, importação estática e anotações....................... Capítulo 13: Tipos genéricos ........................................................................................... Capítulo 14: Expressões lambda e referências de método ............................................... Capítulo 15: Applets, eventos e tópicos diversos ............................................................. Capítulo 16: Introdução a Swing ..................................................................................... Capítulo 17: Introdução a JavaFX.................................................................................... Schildt_Iniciais.indd xiv 568 568 568 569 569 569 570 570 573 574 574 576 576 577 577 581 581 604 606 607 610 611 615 620 622 624 627 630 633 636 641 644 650 655 24/02/15 09:08 Sumário B xv Usando comentários de documentação da linguagem Java .......................... 661 Tags de javadoc ................................................................................................................ @author ................................................................................................................... {@code} .................................................................................................................. @deprecated ............................................................................................................ {@docRoot} ............................................................................................................ @exception .............................................................................................................. {@inheritDoc}......................................................................................................... {@link}.................................................................................................................... {@linkplain}............................................................................................................ {@literal} ................................................................................................................ @param.................................................................................................................... @return .................................................................................................................... @see ........................................................................................................................ @serial ..................................................................................................................... @serialData ............................................................................................................. @serialField ............................................................................................................. @since ..................................................................................................................... @throws ................................................................................................................... {@value} ................................................................................................................. @version .................................................................................................................. Forma geral de um comentário de documentação ........................................................... O que javadoc gera ........................................................................................................... Exemplo que usa comentários de documentação ............................................................. 662 663 663 663 663 663 664 664 664 664 664 664 665 665 665 665 665 666 666 666 666 667 667 Índice .................................................................................................................. 669 Schildt_Iniciais.indd xv 24/02/15 09:08