Sumário PARTE I A LINGUAGEM JAVA 1 Capítulo 1 Fundamentos da programação Java 3 ASPECTOS BÁSICOS DA COMPUTAÇÃO 4 Os componentes de hardware de um computador 4 Bits, bytes e binário 6 O sistema operacional 6 O PROGRAMA 7 LINGUAGENS DE PROGRAMAÇÃO 8 A LINGUAGEM JAVA 9 Origem da linguagem Java 10 Contribuição da linguagem Java para a Internet 11 Applets Java 11 Segurança 12 Portabilidade 12 O segredo da linguagem Java: o bytecode 12 A evolução de Java 13 AS PRINCIPAIS CARACTERÍSTICAS DA PROGRAMAÇÃO ORIENTADA A OBJETOS 14 Encapsulamento 15 Polimorfismo 16 Herança 16 O JAVA DEVELOPMENT KIT 17 UM PRIMEIRO PROGRAMA SIMPLES 18 Inserindo o programa 18 Compilando o programa 19 Executando o programa 19 Primeiro exemplo de programa linha a linha 19 TRATANDO ERROS DE SINTAXE 22 UM SEGUNDO PROGRAMA SIMPLES 23
x Sumário OUTRO TIPO DE DADO 25 DUAS INSTRUÇÕES DE CONTROLE 28 A instrução if 28 O laço for 30 CRIE BLOCOS DE CÓDIGO 32 PONTO E VÍRGULA E POSICIONAMENTO 33 PRÁTICAS DE RECUO 34 AS PALAVRAS-CHAVE JAVA 36 IDENTIFICADORES EM JAVA 37 AS BIBLIOTECAS DE CLASSES JAVA 38 EXERCÍCIOS 39 Capítulo 2 Introdução aos tipos de dados e operadores 42 POR QUE OS TIPOS DE DADOS SÃO IMPORTANTES 42 TIPOS PRIMITIVOS DA LINGUAGEM JAVA 43 Inteiros 43 Tipos de ponto flutuante 45 Caracteres 46 O tipo booleano 47 LITERAIS 49 Literais hexadecimais, octais e binários 50 Sequências de escape de caracteres 51 Literais de strings 51 UM EXAME MAIS DETALHADO DAS VARIÁVEIS 52 Inicializando uma variável 53 Inicialização dinâmica 53 ESCOPO E O TEMPO DE VIDA DAS VARIÁVEIS 54 OPERADORES 57 OPERADORES ARITMÉTICOS 57 Incremento e decremento 58 OPERADORES RELACIONAIS E LÓGICOS 59 OPERADORES LÓGICOS DE CURTO-CIRCUITO 61 O OPERADOR DE ATRIBUIÇÃO 63 ATRIBUIÇÕES ABREVIADAS 63 CONVERSÃO DE TIPOS EM ATRIBUIÇÕES 64 USANDO UMA COERÇÃO 65 PRECEDÊNCIA DE OPERADORES 67 EXPRESSÕES 69 Conversão de tipos em expressões 69 Espaçamento e parênteses 71 EXERCÍCIOS 72
Sumário xi Capítulo 3 Instruções de controle de programa 75 CARACTERES DE ENTRADA DO TECLADO 76 A INSTRUÇÃO if 77 Ifs ANINHADOS 79 A ESCADA if-else-if 80 A INSTRUÇÃO switch 81 INSTRUÇÕES switch ANINHADAS 84 O LAÇO for 88 ALGUMAS VARIAÇÕES DO LAÇO for 89 Partes ausentes 90 O laço infinito 91 Laços sem corpo 91 DECLARANDO VARIÁVEIS DE CONTROLE DE LAÇO DENTRO DA INSTRUÇÃO for 92 O LAÇO for MELHORADO 93 O LAÇO while 93 O LAÇO do-while 95 USE break PARA SAIR DE UM LAÇO 100 USE break COMO UMA FORMA DE goto 102 USE continue 106 LAÇOS ANINHADOS 111 EXERCÍCIOS 112 Capítulo 4 Introdução a classes, objetos e métodos 116 FUNDAMENTOS DAS CLASSES 116 Forma geral de uma classe 117 Definindo uma classe 118 COMO OS OBJETOS SÃO CRIADOS 121 AS VARIÁVEIS DE REFERÊNCIA E A ATRIBUIÇÃO 121 MÉTODOS 123 Adicionando um método à classe Vehicle 123 RETORNANDO DE UM MÉTODO 125 RETORNANDO UM VALOR 126 USANDO PARÂMETROS 128 Adicionando um método parametrizado a Vehicle 130 CONSTRUTORES 138 CONSTRUTORES PARAMETRIZADOS 139 Adicionando um construtor à classe Vehicle 140 O OPERADOR new REVISITADO 142 COLETA DE LIXO E FINALIZADORES 142 O método finalize( ) 143 A PALAVRA-CHAVE this 146 EXERCÍCIOS 148
xii Sumário Capítulo 5 Mais tipos de dados e operadores 152 ARRAYS 152 Arrays unidimensionais 153 ARRAYS MULTIDIMENSIONAIS 158 Arrays bidimensionais 158 Arrays irregulares 159 Arrays de três ou mais dimensões 161 Inicializando arrays multidimensionais 161 SINTAXE ALTERNATIVA PARA A DECLARAÇÃO DE ARRAYS 163 ATRIBUINDO REFERÊNCIAS DE ARRAYS 163 USANDO O MEMBRO length 165 O LAÇO for DE ESTILO FOR-EACH 173 Iterando por arrays multidimensionais 176 Aplicando o laço for melhorado 177 STRINGS 178 Construindo strings 178 Operando com strings 179 Arrays de strings 181 Strings não podem ser alterados 182 Usando um string para controlar uma instrução switch 183 USANDO ARGUMENTOS DE LINHA DE COMANDO 184 OS OPERADORES BITWISE 186 Os operadores bitwise AND, OR, XOR e NOT 186 Os operadores de deslocamento 191 Atribuições abreviadas bitwise 193 O OPERADOR? 197 EXERCÍCIOS 198 Capítulo 6 Verificação minuciosa dos métodos e classes 202 CONTROLANDO O ACESSO A MEMBROS DE CLASSES 202 Modificadores de acesso da linguagem Java 203 PASSE OBJETOS PARA OS MÉTODOS 208 COMO OS ARGUMENTOS SÃO PASSADOS 209 RETORNANDO OBJETOS 212 SOBRECARGA DE MÉTODOS 214 SOBRECARREGANDO CONSTRUTORES 219 RECURSÃO 225 ENTENDENDO static 229 Variáveis estáticas 230 Métodos estáticos 232 Blocos estáticos 233
Sumário xiii INTRODUÇÃO ÀS CLASSES ANINHADAS E INTERNAS 237 VARARGS: ARGUMENTOS EM QUANTIDADE VARIÁVEL 241 Aspectos básicos dos varargs 242 Sobrecarregando métodos varargs 244 Varargs e ambiguidade 246 EXERCÍCIOS 247 Capítulo 7 Herança 253 ASPECTOS BÁSICOS DE HERANÇA 253 ACESSO A MEMBROS E HERANÇA 256 CONSTRUTORES E HERANÇA 259 USANDO super PARA CHAMAR CONSTRUTORES DA SUPERCLASSE 261 USANDO super PARA ACESSAR MEMBROS DA SUPERCLASSE 265 CRIANDO UMA HIERARQUIA DE VÁRIOS NÍVEIS 269 QUANDO OS CONSTRUTORES SÃO EXECUTADOS? 272 REFERÊNCIAS DA SUPERCLASSE E OBJETOS DA SUBCLASSE 273 SOBREPOSIÇÃO DE MÉTODOS 278 MÉTODOS SOBREPOSTOS DÃO SUPORTE AO POLIMORFISMO 281 POR QUE SOBREPOR MÉTODOS? 283 Aplicando a sobreposição de métodos a TwoDShape 283 USANDO CLASSES ABSTRATAS 287 USANDO final 292 A palavra-chave final impede a sobreposição 292 A palavra-chave final impede a herança 292 Usando final com membros de dados 293 A CLASSE Object 294 EXERCÍCIOS 295 Capítulo 8 Interfaces 298 ASPECTOS BÁSICOS DA INTERFACE 298 CRIANDO UMA INTERFACE 299 IMPLEMENTANDO UMA INTERFACE 300 USANDO REFERÊNCIAS DE INTERFACES 304 IMPLEMENTANDO VÁRIAS INTERFACES 306 CONSTANTES EM INTERFACES 314 INTERFACES PODEM SER ESTENDIDAS 316 INTERFACES ANINHADAS 317 CONSIDERAÇÕES FINAIS SOBRE AS INTERFACES 318 EXERCÍCIOS 318
xiv Sumário Capítulo 9 Pacotes 321 ASPECTOS BÁSICOS DOS PACOTES 321 Definindo um pacote 322 Encontrando pacotes e CLASSPATH 323 Exemplo breve de pacote 323 PACOTES E O ACESSO A MEMBROS 325 Exemplo de acesso a pacote 326 Entendendo os membros protegidos 328 IMPORTANDO PACOTES 330 Importando pacotes Java padrão 331 IMPORTAÇÃO ESTÁTICA 335 EXERCÍCIOS 338 Capítulo 10 Tratamento de exceções 341 HIERARQUIA DE EXCEÇÕES 342 FUNDAMENTOS DO TRATAMENTO DE EXCEÇÕES 342 Usando try e catch 343 Exemplo de exceção simples 343 CONSEQUÊNCIAS DE UMA EXCEÇÃO NÃO CAPTURADA 346 EXCEÇÕES PERMITEM QUE VOCÊ TRATE ERROS NORMALMENTE 347 USANDO VÁRIAS CLÁUSULAS CATCH 349 CAPTURANDO EXCEÇÕES DE SUBCLASSES 350 BLOCOS try PODEM SER ANINHADOS 351 LANÇANDO UMA EXCEÇÃO 353 Relançando uma exceção 354 EXAME MAIS DETALHADO DE Throwable 355 USANDO finally 357 USANDO throws 359 EXCEÇÕES INTERNAS DA LINGUAGEM JAVA 360 NOVOS RECURSOS DE EXCEÇÕES ADICIONADOS PELO JDK7 363 CRIANDO SUBCLASSES DE EXCEÇÕES 364 EXERCÍCIOS 371 Capítulo 11 Usando I/O 376 I/O JAVA É BASEADO EM FLUXOS 377 FLUXOS DE BYTES E FLUXOS DE CARACTERES 377 CLASSES DE FLUXOS DE BYTES 377 CLASSES DE FLUXOS DE CARACTERES 378 FLUXOS PREDEFINIDOS 379 USANDO OS FLUXOS DE BYTES 380
Sumário xv Lendo a entrada do console 381 Gravando a saída no console 382 LENDO E GRAVANDO ARQUIVOS USANDO FLUXOS DE BYTES 383 Obtendo entradas de um arquivo 384 Gravando em um arquivo 387 FECHANDO AUTOMATICAMENTE UM ARQUIVO 389 LENDO E GRAVANDO DADOS BINÁRIOS 392 ARQUIVOS DE ACESSO ALEATÓRIO 397 USANDO OS FLUXOS BASEADOS EM CARACTERES DA LINGUAGEM JAVA 400 Entrada do console com o uso de fluxos de caracteres 400 Saída no console com o uso de fluxos de caracteres 404 I/O DE ARQUIVO COM O USO DE FLUXOS DE CARACTERES 405 Usando um FileWriter 405 Usando um FileReader 406 File 408 Obtendo as propriedades de um arquivo 408 Obtendo uma listagem de diretório 410 Usando FilenameFilter 411 A alternativa listfiles( ) 412 Vários métodos utilitários de File 412 USANDO OS ENCAPSULADORES DE TIPOS DA LINGUAGEM JAVA PARA CONVERTER STRINGS NUMÉRICOS 414 EXERCÍCIOS 423 Capítulo 12 Programação com várias threads 428 FUNDAMENTOS DO USO DE VÁRIAS THREADS 428 A CLASSE Thread E A INTERFACE Runnable 429 CRIANDO UMA THREAD 430 Algumas melhorias simples 433 CRIANDO VÁRIAS THREADS 438 DETERMINANDO QUANDO UMA THREAD TERMINA 440 PRIORIDADES DAS THREADS 443 SINCRONIZAÇÃO 444 USANDO MÉTODOS SINCRONIZADOS 445 A INSTRUÇÃO synchronized 448 COMUNICAÇÃO ENTRE THREADS COM O USO DE notify( ), wait( ) E notifyall( ) 451 Exemplo que usa wait( ) e notify( ) 451 SUSPENDENDO, RETOMANDO E ENCERRANDO THREADS 457 EXERCÍCIOS 462
xvi Sumário Capítulo 13 Enumerações, autoboxing e anotações 467 ENUMERAÇÕES 467 Fundamentos da enumeração 468 AS ENUMERAÇÕES JAVA SÃO TIPOS DE CLASSE 471 MÉTODOS values( ) E valueof( ) 471 CONSTRUTORES, MÉTODOS, VARIÁVEIS DE INSTÂNCIA E ENUMERAÇÕES 472 Duas restrições importantes 474 ENUMERAÇÕES HERDAM Enum 474 AUTOBOXING 482 Encapsuladores de tipos 482 Fundamentos do autoboxing 484 Autoboxing e os métodos 485 Autoboxing/unboxing ocorre em expressões 486 Advertência 488 ANOTAÇÕES (METADADOS) 489 Criando e usando uma anotação 489 Anotações internas 490 EXERCÍCIOS 492 Capítulo 14 Tipos genéricos 496 FUNDAMENTOS DOS TIPOS GENÉRICOS 497 Exemplo simples de genérico 497 Genéricos só funcionam com objetos 501 Tipos genéricos diferem de acordo com seus argumentos de tipo 501 Classe genérica com dois parâmetros de tipo 501 A forma geral de uma classe genérica 503 TIPOS LIMITADOS 504 USANDO ARGUMENTOS CURINGAS 507 CURINGAS LIMITADOS 510 MÉTODOS GENÉRICOS 513 CONSTRUTORES GENÉRICOS 515 HIERARQUIAS DE CLASSES GENÉRICAS 516 INTERFACES GENÉRICAS 519 TIPOS BRUTOS E CÓDIGO LEGADO 526 INFERÊNCIA DE TIPOS COM O OPERADOR LOSANGO 529 ERASURE 531 ERROS DE AMBIGUIDADE 531 ALGUMAS RESTRIÇÕES DOS GENÉRICOS 532 Parâmetros de tipos não podem ser instanciados 532 Restrições aos membros estáticos 533 Restrições aos arrays genéricos 533
Sumário xvii Restrições a exceções genéricas 534 EXERCÍCIOS 534 Capítulo 15 Applets e as outras palavras-chave Java 539 ASPECTOS BÁSICOS DOS APPLETS 539 ESQUELETO DE APPLET COMPLETO 543 INICIALIZAÇÃO E ENCERRAMENTO DO APPLET 544 ASPECTO-CHAVE DA ARQUITETURA DE UM APPLET 544 SOLICITANDO ATUALIZAÇÃO 545 USANDO A JANELA DE STATUS 550 PASSANDO PARÂMETROS PARA APPLETS 551 AS OUTRAS PALAVRAS-CHAVE JAVA 553 Modificador volatile 554 Modificador transient 554 instanceof 554 strictfp 554 assert 555 Métodos nativos 555 EXERCÍCIOS 557 Capítulo 16 Introdução ao projeto orientado a objetos 559 UM SOFTWARE ELEGANTE E POR QUE ISSO IMPORTA 560 Propriedades de um software elegante 561 MÉTODOS ELEGANTES 563 Convenções de nomenclatura 563 Coesão dos métodos 564 Objetos bem-formados 566 Documentação interna 567 Documentação externa 568 CLASSES ELEGANTES 571 A coesão das classes e o padrão Expert 571 Evitando duplicação 573 Interface completa 575 Projete pensando em mudanças 576 Lei de Demeter 579 HERANÇA VERSUS DELEGAÇÃO 581 Diagramas de classes UML 581 Possibilidade de reutilização do código 584 O relacionamento É-um 585 Comportamento semelhante 587 Polimorfismo 590
xviii Sumário Custos da herança 590 PADRÕES DE PROJETO 593 Padrão Adapter 594 Padrão Observer 597 EXERCÍCIOS 602 PARTE II INTRODUÇÃO À PROGRAMAÇÃO DE GUIs COM SWING 607 Capítulo 17 Aspectos básicos de Swing 609 ORIGENS E FILOSOFIA DE PROJETO DE SWING 610 COMPONENTES E CONTÊINERES 612 Componentes 612 Contêineres 613 Painéis do contêiner de nível superior 613 GERENCIADORES DE LEIAUTE 614 PRIMEIRO PROGRAMA SWING SIMPLES 615 Primeiro exemplo de Swing linha a linha 617 TRATAMENTO DE EVENTOS 621 Eventos 621 Fontes de eventos 621 Ouvintes de eventos 622 Classes de eventos e interfaces de ouvintes 622 Classes adaptadoras 624 USANDO UM BOTÃO DE AÇÃO 625 INTRODUÇÃO AO JTextField 633 USE CLASSES INTERNAS ANÔNIMAS PARA TRATAR EVENTOS 645 EXERCÍCIOS 646 Capítulo 18 Examinando os controles de Swing 649 JLabel E ImageIcon 650 OS BOTÕES DE SWING 653 Tratando eventos de ação 654 Tratando eventos de item 654 JButton 655 JToggleButton 658 Caixas de seleção 660 Botões de rádio 662 JTextField 665 JScrollPane 675 JList 682 JComboBox 686
Sumário xix ÁRVORES 689 JTable 693 UMA EXPLICAÇÃO RÁPIDA DOS MODELOS 696 EXERCÍCIOS 697 Capítulo 19 Trabalhando com menus 700 ASPECTOS BÁSICOS DOS MENUS 700 UMA VISÃO GERAL DE JMenuBar, JMenu E JMenuItem 702 JMenuBar 702 JMenu 703 JMenuItem 704 CRIE UM MENU PRINCIPAL 704 ADICIONE MNEMÔNICOS E ACELERADORES AOS ITENS DE MENU 709 ADICIONE IMAGENS E DICAS DE FERRAMENTAS AOS ITENS DE MENU 712 USE JRadioButtonMenuItem E JCheckBoxMenuItem 720 EXERCÍCIOS 722 Capítulo 20 Caixas de diálogo 725 JOptionPane 726 showmessagedialog( ) 728 showconfirmdialog( ) 732 showinputdialog( ) 736 showoptiondialog( ) 741 JDialog 746 CRIE UMA CAIXA DE DIÁLOGO NÃO MODAL 750 SELECIONE ARQUIVOS COM JFileChooser 751 EXERCÍCIOS 762 Capítulo 21 Threads, applets e geração de componentes 766 O USO DE VÁRIAS THREADS EM SWING 766 USE Timer 773 CRIE APPLETS SWING 779 Um applet Swing simples 780 GERANDO COMPONENTES 787 Fundamentos da geração de componentes 787 O contexto gráfico 788 Calcule a área de desenho 789 Solicite a geração do componente 789 Um exemplo de geração de componente 789 EXERCÍCIOS 795
xx Sumário PARTE III EXAMINANDO A BIBLIOTECA DE APIs JAVA 797 Capítulo 22 Manipulação de strings 799 ASPECTOS BÁSICOS DOS STRINGS 799 OS CONSTRUTORES DE STRING 800 TRÊS RECURSOS DA LINGUAGEM RELACIONADOS A STRINGS 802 Literais de strings 803 Concatenação de strings 803 Concatenação de strings com outros tipos de dados 803 Sobrepondo tostring( ) 804 O MÉTODO length( ) 809 OBTENDO OS CARACTERES DE UM STRING 809 charat( ) 810 getchars( ) 810 tochararray( ) 811 COMPARAÇÃO DE STRINGS 812 equals( ) e equalsignorecase( ) 812 equals( ) versus == 813 regionmatches( ) 814 startswith( ) e endswith( ) 814 compareto( ) e comparetoignorecase( ) 815 USANDO indexof( ) E lastindexof( ) 817 OBTENDO UM STRING MODIFICADO 819 substring( ) 819 replace( ) 820 trim( ) 821 ALTERANDO A CAIXA DOS CARACTERES DE UM STRING 822 StringBuffer E StringBuilder 825 EXERCÍCIOS 825 Capítulo 23 Examinando o pacote java.lang 828 ENCAPSULADORES DE TIPOS PRIMITIVOS 829 Number 829 Double e Float 830 Byte, Short, Integer e Long 831 Character 834 Boolean 837 O autoboxing e os encapsuladores de tipos 837 A CLASSE Math 838 A CLASSE Process 842 A CLASSE ProcessBuilder 842 A CLASSE Runtime 844 A CLASSE System 846
Sumário xxi Usando currenttimemillis( ) para marcar o tempo de execução do programa 847 Usando arraycopy( ) 848 Obtendo valores de propriedades 849 Redirecionando fluxos de I/O padrão 849 A CLASSE Object 851 A CLASSE Class 851 A CLASSE Enum 853 CLASSES RELACIONADAS A THREADS E A INTERFACE Runnable 853 OUTRAS CLASSES 854 AS INTERFACES DE java.lang 854 A interface Comparable 855 A interface Appendable 857 A interface Iterable 857 A interface Readable 858 A interface CharSequence 858 A interface AutoCloseable 859 EXERCÍCIOS 860 Capítulo 24 Examinando o pacote java.util 862 A CLASSE Locale 864 TRABALHANDO COM DATA E HORA 867 Date 867 Calendar e GregorianCalendar 868 FORMATANDO A SAÍDA COM Formatter 873 Os construtores de Formatter 873 Aspectos básicos da formatação 874 Formatando strings e caracteres 877 Formatando números 877 Formatando data e hora 878 Os especificadores %n e %% 880 Especificando uma largura de campo mínima 880 Especificando precisão 881 Usando os flags de formatação 882 A opção de uso de maiúsculas 884 Usando um índice de argumento 885 Formatação para um local diferente 886 Fechando um Formatter 887 A FORMATAÇÃO E O MÉTODO printf( ) 890 A CLASSE Scanner 892 Os construtores de Scanner 892 Aspectos básicos da varredura 892 Alguns exemplos com Scanner 894
xxii Sumário Mais alguns recursos de Scanner 899 A CLASSE Random 900 USE Observable E Observer 901 AS CLASSES Timer E TimerTask 905 CLASSES E INTERFACES UTILITÁRIAS VARIADAS 907 EXERCÍCIOS 908 Capítulo 25 Usando as estruturas de dados do Collections Framework 911 VISÃO GERAL DAS ESTRUTURAS DE DADOS 912 Pilhas e filas 912 Listas encadeadas 913 Árvores 914 Tabelas hash 915 Selecionando uma estrutura de dados 915 VISÃO GERAL DAS COLEÇÕES 916 AS INTERFACES DE COLEÇÕES 917 A interface Collection 918 A interface List 920 A interface Set 920 A interface SortedSet 920 A interface NavigableSet 922 A interface Queue 922 A interface Deque 924 AS CLASSES DE COLEÇÕES 926 A classe ArrayList 927 A classe LinkedList 930 A classe HashSet 934 A classe TreeSet 936 A classe LinkedHashSet 938 A classe ArrayDeque 939 A classe PriorityQueue 941 ACESSANDO UMA COLEÇÃO COM UM ITERADOR 942 Usando um iterador 942 A alternativa aos iteradores com o uso de for-each 946 TRABALHANDO COM MAPAS 946 As interfaces de mapas 946 A interface Map 947 A interface SortedMap 947 A interface NavigableMap 948 A interface Map.Entry 949 As classes de mapas 951
Sumário xxiii A classe HashMap 952 A classe TreeMap 953 A classe LinkedHashMap 955 COMPARADORES 956 OS ALGORITMOS DE COLEÇÕES 959 A CLASSE Arrays 962 AS CLASSES E INTERFACES LEGADAS 963 A interface Enumeration 963 Vector 963 Stack 963 Dictionary 963 Hashtable 963 Properties 964 EXERCÍCIOS 964 Capítulo 26 Redes com java.net 967 ASPECTOS BÁSICOS DE REDES 967 AS CLASSES E INTERFACES DE REDES 968 A CLASSE InetAddress 969 A CLASSE Socket 971 A CLASSE URL 975 A CLASSE URLConnection 977 A CLASSE HttpURLConnection 982 DATAGRAMAS 984 DatagramSocket 985 DatagramPacket 985 Um exemplo de datagrama 986 EXERCÍCIOS 989 Capítulo 27 Os utilitários de concorrência 991 OS PACOTES DA API DE CONCORRÊNCIA 992 java.util.concurrent 992 java.util.concurrent.atomic 993 java.util.concurrent.locks 993 USANDO OBJETOS DE SINCRONIZAÇÃO 994 Semaphore 994 CountDownLatch 997 CyclicBarrier 1000 Exchanger 1002 Phaser 1005 USANDO UM EXECUTOR 1012 Um exemplo de executor simples 1013
xxiv Sumário USANDO Callable E Future 1015 A ENUMERAÇÃO TimeUnit 1018 AS COLEÇÕES DE CONCORRÊNCIA 1020 BLOQUEIOS 1020 OPERAÇÕES ATÔMICAS 1023 PROGRAMAÇÃO PARALELA COM O FRAMEWORK FORK/JOIN 1024 AS PRINCIPAIS CLASSES DO FRAMEWORK FORK/JOIN 1025 ForkJoinTask<V> 1025 RecursiveAction 1026 RecursiveTask<V> 1026 ForkJoinPool 1027 A ESTRATÉGIA DE DIVIDIR E CONQUISTAR 1028 Um primeiro exemplo simples do Framework Fork/Join 1029 Entendendo o impacto do nível de paralelismo 1031 Um exemplo que usa RecursiveTask<V> 1034 Executando uma tarefa de forma assíncrona 1036 OS UTILITÁRIOS DE CONCORRÊNCIA VERSUS A ABORDAGEM TRADICIONAL JAVA 1037 EXERCÍCIOS 1038 Apêndice A Usando comentários de documentação da linguagem Java 1041 TAGS DE javadoc 1041 FORMA GERAL DE UM COMENTÁRIO DE DOCUMENTAÇÃO 1045 O QUE javadoc GERA 1046 EXEMPLO QUE USA COMENTÁRIOS DE DOCUMENTAÇÃO 1046 Apêndice B Introdução às expressões regulares 1049 A CLASSE Pattern 1049 A CLASSE Matcher 1050 ASPECTOS BÁSICOS DA SINTAXE DAS EXPRESSÕES REGULARES 1050 DEMONSTRANDO A CORRESPONDÊNCIA DE PADRÕES 1051 USANDO O CARACTERE CURINGA E QUANTIFICADORES 1053 TRABALHANDO COM CLASSES DE CARACTERES 1055 USANDO replaceall( ) 1055 A CONEXÃO COM A CLASSE String 1056 ASSUNTOS A EXPLORAR 1056 Apêndice C Respostas de exercícios selecionados 1057 Índice 1111