Tutorial Java Tradução da 5a Edição Sharon Biocca Zakhour Sowmya Kannan Raymond Gallardo Book_The Java Tutorial_PFCG.indb 3 29/06/2015 15:15:13 Conteúdo Prefácioxxi Sobre os Autores xxv Capítulo 1 Dando a Partida O Fenômeno da Tecnologiya Java A Linguagem de Programação Java A Plataforma Java O Que a Tecnologia Java Pode Fazer? Como a Tecnologia Java Pode Mudar a Minha Vida? A Aplicação “Hello World!” “Hello World!” para a IDE NetBeans “Hello World! para o Microsoft Windows “Hello World!” para Solaris e Linux Um Olhar Mais de Perto na Aplicação “Hello World!” Comentários do Código Fonte A Definição da Classe HelloWorldApp O Método main (Principal) Problemas Comuns (e Suas Soluções) Problemas no Compilador Problemas no Processamento Perguntas e Exercícios: Dando a Partida 1 1 2 2 4 4 5 6 14 18 22 23 23 24 25 25 27 29 v Book_The Java Tutorial_PFCG.indb 5 29/06/2015 15:15:14 vi Conteúdo Perguntas29 Exercícios29 Respostas30 Capítulo 2 Conceitos de Programação Orientada a Objeto 31 O Que é um Objeto? 32 O Que é uma Classe? 34 O Que é Herança? 36 O Que é uma Interface? 37 O Que é um Pacote? 38 Perguntas e Exercícios: Conceitos de Programação Orientada a Objeto 38 Perguntas38 Exercícios39 Respostas39 Capítulo 3 Noções Básicas da Linguagem 41 Variáveis42 Nomenclatura43 Tipos Primitivos de Dados 44 Arrays49 Resumo de Variáveis 54 Perguntas e Exercícios: Variáveis 54 Operadores55 Operadores de Atribuição, Aritméticos e Unários 56 Operadores de Igualdade, Relacionais e Condicionais 59 Operadores Bitwise e Bit Shift 62 Resumo de Operadores 62 Perguntas e Exercícios: Operadores 64 Expressões, Declarações e Blocos 65 Expressões65 Declarações66 Blocos67 Perguntas e Exercícios: Expressões, Declarações e Blocos 67 Declarações de Controle de Fluxo 68 As Declarações if-then e if-then-else 68 A Declaração switch 70 As Declarações while e do-while 75 A Declaração for 76 Declarações de Desvio 78 Resumo das Declarações de Controle de Fluxo 82 Perguntas e Exercícios: Declarações de Controle de Fluxo 82 Book_The Java Tutorial_PFCG.indb 6 29/06/2015 15:15:14 Conteúdo vii Capítulo 4 Classes e Objetos 85 Classes86 Declarando Classes 87 Declarando Variáveis Membro 88 Definindo Métodos 90 Determinando Construtores para Suas Classes 92 Passando Informações para um Método ou um Construtor 94 Objetos98 Criando Objetos 99 Usando Objetos 103 Mais Sobre Classes 106 Retornando um Valor de um Método 106 Usando a Palavra-chave this108 Usando this com um campo 108 Entendendo Instância e Membros de Classe 111 Inicializando Campos 115 Resumo de Criação e Utilização de Classes e Objetos 117 Perguntas e Exercícios: Classes 118 Perguntas e Exercícios: Objetos 119 Classes Aninhadas 120 Definição120 Por que Usar Classes Aninhadas? 121 Classes Static Aninhadas 121 Classes Interiores 122 Exemplo de Classe Interna 123 Resumo de Classes Aninhadas 125 Perguntas e Exercícios: Classes Aninhadas 125 Tipos Enum 126 Perguntas e Exercícios: Tipos Enum 129 Anotações129 Documentação130 Anotações Usadas pelo Compilador 132 Processamento de Anotações 133 Perguntas e Exercícios: Anotações 133 Capítulo 5 Interfaces e Herança 135 Interfaces135 Interfaces em Java 136 Interfaces como APIs 137 Interfaces e Herança Múltipla 137 Definindo uma Interface 138 Book_The Java Tutorial_PFCG.indb 7 29/06/2015 15:15:14 viii Conteúdo Implementando uma Interface 139 Usando uma Interface Como um Tipo 141 Reescrevendo Interfaces 142 Resumo de Interfaces 142 Perguntas e Exercícios: Interfaces 142 Herança143 A Hierarquia da Classes da Plataforma Java 144 Um Exemplo de Herança 144 O Que É Possível Fazer em uma Subclasse 146 Membros Privados em uma Superclasse 146 Casting de Objetos 146 Sobrepondo (Overriding) e e Ocultando (Hiding) Métodos 148 Polimorfismo150 Ocultando Campos 152 Usando a Palavra-chave super 152 Object como uma Superclasse 154 Escrevendo Classes e Métodos Final 158 Métodos e Classes Abstract 158 Resumo de Herança 161 Perguntas e Exercícios: Herança 162 Capítulo 6 Genéricos163 Por Que usar Genéricos? 164 Tipos Genéricos 164 Uma Simples Classe Box 164 Uma Versão Genérica da Classe Box 165 Convenções de Nomenclatura de Tipo Parâmetro 165 Invocando e Instanciando um Tipo Genérico 166 Diamond166 Parâmetros de Tipo Múltiplo 167 Tipos Parametrizados 168 Tipos Raw 168 Métodos Genéricos 170 Parâmetro Tipo Bounded171 Múltiplos Bounds 172 Métodos Genéricos e Parâmetros Tipo Bounded 173 Genéricos, Herança e Subtipos 173 Classes Genéricas e SubTyping 175 Inferência de Tipo 176 Inferência de Tipo e Métodos Genéricos 176 Inferência de Tipo e Instanciação de Classes Genéricas 177 Book_The Java Tutorial_PFCG.indb 8 29/06/2015 15:15:14 Conteúdo ix Inferência de Tipo e Construtores Genéricos de Classes Genéricas e Não Genéricas 178 Coringas179 Coringas Upper-Bounded 179 Coringas Unbounded 180 Coringas Lower-Bounded 182 Coringas e Subtipificação 182 Captura de Coringa e Métodos Auxiliares 184 Diretrizes para o Uso de Coringas 187 Apagamento de Tipo 188 Apagamento de Tipos Genéricos 188 Apagamento de Métodos Genéricos 190 Efeitos de Apagamento de Tipo e Métodos Bridge (de Ponte) 191 Tipos Nonreifiable 193 Restrições sobre Genéricos 196 Não é Possível Instanciar Tipos Genéricos com Tipos Primitivos 196 Não É Possível Criar Instâncias de Parâmetros Tipo 197 Não É Possível Declarar Campos Static Cujos Tipos Sejam Parâmetros Tipo 197 Não É Possível Usar Casts ou Instanceof com Tipos Parametrizados 198 Não É Possível Criar Arrays de Tipos Parametrizados 199 Não É Possível Criar, Obter ou Lançar Objetos de Tipos Parametrizados 199 Não É Possível Sobrecarregar um Método Onde os Tipos Formais de Parâmetro de Cada Sobrecarga Apagam o o Mesmo Tipo Raw 200 Perguntas e Exercícios: 200 Perguntas200 Exercícios202 Respostas202 Capítulo 7 Pacotes203 Criando um Pacote 205 Nomeando um Pacote 206 Convenções de Nomenclatura 206 Usando Membros de Pacote 207 Referindo-se a um Membro de Pacote por seu Nome Qualificado 207 Book_The Java Tutorial_PFCG.indb 9 29/06/2015 15:15:14 x Conteúdo Importando um membro de Pacote 208 Importando um Pacote Inteiro 208 Hierarquias Aparentes de Pacotes 209 Ambiguidades de Nomes 209 A Declaração Static Import 210 Gerenciando Arquivos Fonte e de Classes 211 Definindo a Variável de Sistema CLASSPATH 213 Resumo de Pacotes 213 Perguntas e Exercícios: Criando e Usando Pacotes 214 Perguntas214 Exercícios214 Respostas215 Capítulo 8 Números e Strings 217 Números217 As Classes de Números 218 Formatando a Saída Impressa Numérica 220 Além da Aritmética Básica 224 Autoboxing e Unboxing 230 Resumo de Números 232 Perguntas e Exercícios: Números 233 Caracteres234 Sequências de Escape 235 Strings236 Criando Strings 236 Comprimento da String 237 Concatenando Strings 238 Criando Strings Format 239 Convertendo entre Números e Strings 240 Manipulando Caracteres em uma String 242 Buscando por Caracteres e Substrings em uma String 244 Comparando Strings e Partes de Strings 247 A Classe StringBuilder 247 Resumo de Caracteres e Strings 253 Perguntas e Exercícios: Caracteres e Strings 254 Capítulo 9 Exceções257 O Que é uma Exceção? 258 O Requisito Catch ou Specify 258 As Três Espécies de Exceções 259 Contornando Catch ou Specify 260 Capturando e Lidando com Exceções 261 Book_The Java Tutorial_PFCG.indb 10 29/06/2015 15:15:14 Conteúdo xi O Bloco try 262 Os Blocos catch263 O Bloco finally 264 A Declaração try-with-resources 266 Juntando Tudo 269 Especificando as Exceções Lançadas por um Método 272 Como Lançar Exceções 273 A Declaração throw 274 A Classe Throwable e suas Subclasses 274 Classe Error 275 Classe Exception 275 Exceções Encadeadas 276 Criando Classes de Exceção 277 Exceções Não Verificadas: A Controvérsia 279 Vantagens das Exceções 280 Vantagem 1: Separar Código de Tratamento de Erros de Código “Regular” 280 Vantagem 2: Propagar Erros para Cima da Pilha de Chamada 282 Vantagem 3: Agrupar e Diferenciar Tipos de Erros 283 Resumo de Exceções 285 Perguntas e Exercícios: 285 Perguntas285 Exercícios286 Respostas287 Capítulo 10 I/O básico e NIO.2 289 Streams de I/O 289 Streams de Bytes 291 Streams de Caracteres 293 Streams Bufferizados 295 Escaneando e Formatando 296 I/O a Partir da Linha de Comando 302 Streams de Dados 305 Streams de Objetos 307 Arquivo de I/O (Apresentando NIO.2) 309 O Que É um Path (Caminho)? (E Outros Fatos sobre Sistema de Arquivos) 309 A Classe Path 312 Operações com Arquivos 320 Verificando um Arquivo ou Diretório 324 Book_The Java Tutorial_PFCG.indb 11 29/06/2015 15:15:14 xii Conteúdo Deletando um Arquivo ou Diretório 325 Copiando um Arquivo ou Diretório 325 Movendo um Arquivo ou Diretórios 326 Gerenciando Metadados (Atributos File e File Store) 327 Lendo, Escrevendo e Criando Arquivos 335 Arquivos de Acesso Randômico 342 Criando e Lendo Diretórios 343 Links, Simbólicos e Não 347 Percorrendo a Árvore de Arquivos 349 Encontrando Arquivos 354 Monitorando Mudanças em um Diretório 357 Outros Métodos Úteis 363 Código Herdado de Arquivo I/O 365 Resumo de I/O Básico e NIO.2 366 Perguntas e Exercícios: Basic I/O and NIO.2 368 Perguntas368 Exercícios369 Respostas369 Capítulo 11 Coleções371 Introdução a Coleções 372 O Que é uma Estrutura de Coleções? 372 Benefícios da Java Collections Framework 373 Interfaces374 A Interface Collection 376 Atravessando Coleções 377 O Iterator 377 Operações em Bloco da Interface Collection 378 Operações de Array da Interface Collection 379 A Interface Set 380 A Interface List 384 A Interface Queue 394 A Interface Map 397 Ordenação de Objetos 405 A Interface SortedSet 412 A Interface SortedMap 415 Resumo de Interfaces 417 Perguntas e Exercícios: Interfaces 417 Implementações418 Implementações de Set 421 Implementaçoes de List 422 Book_The Java Tutorial_PFCG.indb 12 29/06/2015 15:15:14 Conteúdo xiii Implementações de Map 424 Implementações de Queue 425 Implementações Wrapper 427 Implementações Práticas 429 Resumo de Implementações 431 Perguntas e Exercícios: Implementações 432 Algoritmos432 Ordenação433 Embaralhando435 Manipulação de Dados de Rotina 435 Pesquisando436 Composição436 Encontrando Valores Extremos 437 Implementações Personalizadas de Collection 437 Razões para Escrever uma Implementação 437 Como Escrever uma Implementação Personalizada 438 Interoperabilidade440 Compatibilidade441 Projeto de API 443 Capítulo 12 Concorrência 445 Processos e Threads 446 Processos446 Threads446 Objetos Thread 447 Definindo e Iniciando uma Thread 447 Pausando a Execução com Sleep 448 Interruptores449 Joins451 O Exemplo SimpleThreads 451 Sincronização453 Interferência de Thread 453 Erros de Consistência de Memória 454 Métodos Sincronizados 455 Intrinsic Locks e Sincronização 457 Acesso Atômico 459 Liveness459 Deadlock460 Starvation e Livelock 461 Blocos Protegidos 461 Objetos Imutáveis 465 Book_The Java Tutorial_PFCG.indb 13 29/06/2015 15:15:14 xiv Conteúdo Um Exemplo de Classe Sincronizada 466 Uma Estratégia para Definir Objetos Imutáveis 467 Objetos Concorrentes de Alto Nível 469 Objetos Lock 470 Executores472 Coleções Concomitantes 477 Variáveis Atômicas 478 Números Randômicos Concomitantes 480 Perguntas e Exercícios: Concorrência 480 Pergunta480 Exercícios480 Respostas481 Capítulo 13 Expressões Regulares 483 Introdução484 O Que São Expressões Regulares? 484 Como São Representadas Expressões Regulares neste Pacote? 485 Test Harness 485 Strings Literals 486 Metacaracteres487 Classes de Caracteres 488 Classes Simples 488 Classe de Caracteres Predefinidas 492 Quantificadores495 Combinações Zero-Length 495 Capturando Grupos de Captura e Classes de Caracteres com Quantificadores 498 Diferença entre Quantificadores Greedy, Reluctant e Possessive 499 Grupos de Captura 500 Numeração501 Backreferences502 Boundary Matches 502 Métodos da Classe Pattern 504 Criando um Pattern com Flags 504 Expressões com Flag Embutidas 506 Usando o Método matches(String, CharSequence) 507 Usando o método split(String) 507 Outros Métodos Utilitários 508 Equivalentes de Métodos Pattern na java.lang.String 509 Métodos da classe Matcher 509 Book_The Java Tutorial_PFCG.indb 14 29/06/2015 15:15:14 Conteúdo xv Métodos Index 510 Métodos Study 510 Métodos Replacement 510 Usando os Métodos start e end 511 Usando os Métodos matches e lookingAt 512 Usando replaceFirst(String) e replaceAll(String) 513 Usando appendReplacement(StringBuffer,String) e appendTail(StringBuffer)514 Métodos Equivalentes a Matcher na java.lang.String 515 Métodos da Classe PatternSyntaxException 515 Suporte Unicode 517 Combinando um Ponto Específico do Código 517 Propriedades de Caracteres Unicode 518 Recursos Adicionais 518 Perguntas e Exercícios: Regular Expressions 519 Perguntas519 Exercícios519 Respostas519 Capítulo 14 O Ambiente de Plataforma 521 Utilidades de Configuração 521 Propriedades522 Argumentos de Linha de Comando 526 Variáveis de Ambiente 527 Outras Utilidades de Configuração 529 Utilidades do Sistema 529 Objetos de I/O de Linha de Comando 530 Propriedades do Sistema 530 O Gerenciador de Segurança 533 Métodos Diversos em System 535 PATH e CLASSPATH 535 Atualizando a Variável de Ambiente PATH (Microsoft Windows) 536 Atualizando a Variável PATH (Solaris e Linux) 538 Verificando a Variável CLASSPATH (Todas as Plataformas) 539 Perguntas e Exercícios: O Ambiente de Plataforma 540 Perguntas540 Exercícios540 Respostas540 Capítulo 15 Empacotando Programas em Arquivos JAR 541 Usando Arquivos JAR: O Básico 542 Book_The Java Tutorial_PFCG.indb 15 29/06/2015 15:15:14 xvi Conteúdo Criando um Arquivo JAR 543 Visualizando o Conteúdo de um Arquivo JAR 546 Extraindo o Conteúdo de um Arquivo JAR 548 Atualizando um Arquivo JAR 550 Rodando Software Empacotado 552 Trabalhando com Arquivos Manifesto: O Básico 553 Entendendo o Manifesto Default 554 Modificando um Arquivo Manifesto 554 Definindo o Ponto de Entrada de uma Aplicação 555 Acrescentando Classes à Class Path do Arquivo JAR 557 Definindo Informação da Versão do Pacote 558 Selando Pacotes dentro de um Arquivo JAR 559 Selando Arquivos JAR 560 Assinando e Verificando Arquivos JAR 560 Entendendo Assinatura e Verificação 561 Assinando Arquivos JAR 564 Verificando Arquivos JAR Assinados 566 Usando APIs Relacionadas a JAR 567 Um Exemplo: A Aplicação JarRunner 567 Perguntas: Empacotando Programas em Arquivos JAR 573 Perguntas573 Respostas573 Capítulo 16 Java Web Start 575 Desenvolvendo uma Aplicação Java Web Start 576 Criando a Classe Top JPanel 577 Criando a Aplicação 578 Os Benefícios de Separar a Funcionalidade Central do Mecanismo Final de Distribuição 578 Recuperando Recursos 579 Distribuindo uma Aplicação Java Web Start 579 Definindo um Servidor Web 581 Exibindo um Indicador de Progresso de Carregamento Personalizado 581 Desenvolvendo um Indicador de Progresso Personalizado 582 Especificando um Indicador de Progresso de Carregamento Personalizado para uma Aplicação Java Web Start 584 Rodando uma Aplicação Java Web Start 585 Rodando uma Aplicação Java Web Start a Partir de um Browser 585 Book_The Java Tutorial_PFCG.indb 16 29/06/2015 15:15:14 Conteúdo xvii Rodando uma Aplicação Java Web Start de um Java Cache Viewer 585 Rodando uma Aplicação Java Web Start a Partir do Desktop 586 Java Web Start e Segurança 586 Download Dinâmico de Certificados HTTPS 587 Problemas Comuns no Java Web Start 587 “Meu Browser Mostra o arquivo JNLP para Minha Aplicação como Texto Simples” 588 “Quando Tento Lançar Meu Arquivo JNLP, Recebo uma Mensagem de Erro” 588 Perguntas e Exercícios: Java Web Start 588 Perguntas588 Exercícios589 Respostas589 Capítulo 17 Applets591 Introdução aos Applets 591 Definindo uma Subclasse Applet 592 Métodos para Milestones 593 Ciclo de Vida de um Applet 594 O Ambiente de Execução de um Applet 596 Desenvolvendo um Applet 597 Distribuindo um Applet 600 Fazendo Mais com Applets 603 Encontrando e Carregando Arquivos de Dados 603 Definindo e Usando Parâmetros de Applets 604 Exibindo Curtas Strings de Status 606 Exibindo Documentos no Browser 607 Invocando Código JavaScript a Partir de um Applet 608 Invocando Métodos Applet a Partir de Código JavaScript 611 Manejando o Status de Inicialização com Manipuladores de Eventos 614 Manipulando o DOM de uma Página Web de um Applet 616 Exibindo um Indicador de Progresso de Carregamento Personalizado 618 Desenvolvendo um Indicador de Progresso de Carregamento Personalizado 618 Especificando um Indicador de Progresso de Carregamento para um Applet 621 Integrando o Indicador de Progresso de Carregamento com uma Interface de Usuário de um Applet 622 Book_The Java Tutorial_PFCG.indb 17 29/06/2015 15:15:14 Conteúdo xix Localização do Script Deployment Toolkit 650 Distribuindo um Applet 650 Distribuindo uma Aplicação Java Web Start 655 Verificando a Versão do Software JRE do Cliente 658 Java Network Launch Protocol 659 Estrutura do Arquivo JNLP 659 Melhores Práticas de Distribuição 667 Reduzindo o Tempo de Carregamento 667 Evitando Verificações de Atualização Desnecessárias 669 Assinando Arquivos JAR Somente Quando Necessário 671 Certificando-se da Presença do Software JRE 672 Perguntas e Exercícios: Distribuição em Profundidade 673 Perguntas673 Exercício673 Respostas674 Apêndice Preparando-se para a Certificação na Linguagem de Programação Java 675 Exame Programador Nível 1 675 Seção 1: Noções Básicas Java 675 Seção 2: Trabalhando com Tipos de Dados Java 676 Seção 3: Usando Operadores e Construções de Decisão 677 Seção 4: Criar e Usar Arrays 678 Seção 5: Usando Construções de Loop 678 Seção 6: Trabalhando com Métodos e Encapsulamento 678 Seção 7: Trabalhando com Herança 679 Seção 8: Lidando com Exceções 680 Exame Programador Nível 2 680 Seção 1: Projeto de Classe Java 681 Seção 2: Projeto Avançado de Classe 681 Seção 3: Princípios de Projeto Orientado a Objeto 682 Seção 4: Genéricos e Coleções 682 Seção 5: Processamento de Strings 684 Seção 6: Exceções e Declarações 684 Seção 7: Fundamentos de Java I/O 685 Seção 8: Arquivos Java (NIO.2) 685 Seção 9: Construindo Aplicações de Bancos de Dados com JDBC 686 Seção 10: Threads 686 Seção 11: Concomitância 687 Seção 12: Localização 687 Book_The Java Tutorial_PFCG.indb 19 29/06/2015 15:15:14 Conteúdo xx Exame de Atualização Java SE 7 Seção 1: Melhoramentos de Linguagem Seção 2: Padrões de Projeto Seção 3: Aplicações de Banco de Dados com JDBC Seção 4: Concomitância Seção 5: Localização Seção 6: Arquivo Java I/O (NIO.2) 688 688 689 689 690 691 692 Índice693 Book_The Java Tutorial_PFCG.indb 20 29/06/2015 15:15:15 Prefácio Desde a aquisição da Sun Microsystems pela Oracle Corporation no início de 2010, estamos vivendo uma época excitante para a linguagem Java. Como evidenciado pelas atividades do programa Java Community Process (Processo da Comunidade Java 1), a linguagem Java continua a se desenvolver. A publicação desta quinta edição de O Tutorial Java reflete a versão 7 da Java Platform Standard Edition (Java SE) e faz referência à Application Programming Interface (API – Interface de Programação de Aplicações) desta edição. Esta edição introduz novos recursos adicionados à plataforma, desde a quarta edição (sobre a versão 6), como a seção sobre NIO.2, o novo arquivo I/O API, e informação sobre a migração de código de herança para a nova API. A cobertura sobre distribuição foi expandida com novos capítulos sobre “Fazendo Mais com as Aplicações Java Rich Internet” (Capítulo 18), e “Distribuição em Profundidade” (Capítulo 19). Uma seção sobre o recurso Fork/Join foi adicionada ao capítulo sobre “Concorrência” (Capítulo 12). Informações sobre os desenvolvimentos Project Coin foram acrescentadas onde necessário, incluindo a nova declaração try-with-resources, a habilidade de capturar mais de um tipo de exceção com apenas um manejador de exceções, suporte para literais binários e a sintaxe diamond, que resulta em códigos genéricos mais limpos. Além da cobertura dos novos recursos, os capítulos anteriores foram reescritos, para incluir novas informações. Por exemplo, “Genéricos” (Capítulo 6), “Java Web Start” (Ca1. N.T.: Organização criada em 1998, como um mecanismo para promover que pessoas ou entidades pudessem participar na criação e no desenvolvimento de novas especificações da tecnologia Java. xxi Book_The Java Tutorial_PFCG.indb 21 29/06/2015 15:15:15 Prefácio xxii pítulo 16), e “Applets” (Capítulo 17), foram atualizados. O Apêndice sobre os exames para a Certificação Java também foi revisado inteiramente. Se pretende fazer um dos exames para certificação Java SE 7, este livro pode ajudar. O Apêndice “Preparando-se para a Certificação na Linguagem de Programação Java” relaciona os três exames disponíveis, detalhando os itens cobertos em cada prova, com referências cruzadas para os locais no livro onde você pode encontrar mais informações sobre cada tópico. Note que esta é uma fonte, entre outras, que você quererá usar para se preparar para a sua prova. Todos os materiais foram totalmente revisados pelos membros da engenharia da Oracle Java para se certificar que a informação está correta e atualizada. Este livro é baseado no tutorial online contido no web site da Oracle no seguinte endereço URL: http://docs.oracle.com/javase/tutorial A informação neste livro, também referido como “o tutorial núcleo” é essencial para os programadores iniciantes e intermediários. Uma vez que tenha dominado este material, explore o resto da documentação sobre a plataforma Java no site. Se está interessado em desenvolver aplicações sofisticadas Rich Internet Applications (RIAs), pesquise o Java FX, o conjunto de ferramentas da nova interface gráfica de usuário (GUI – Graphical User Interface) de tecnologia de ponta. A partir do lançamento do Java SE, atualização 5, você automaticamente recebe o Kit de Desenvolvimento de Software (SDK – Software Development Kit) ao baixar o JDK (Java Development Kit). Para aprender mais, consulte a documentação Java FX no seguinte endereço URL: http://docs.oracle.com/javafx Como sempre, nosso objetivo é criar um guia para programadores, prático e de fácil leitura para ajudá-lo a aprender a usar o rico ambiente fornecido pela Java para construir aplicações, applets e componentes. Vá em frente e programe! Quem Deve Ler Este Livro? Este livro é endereçado para programadores, tanto novatos quanto experientes. Novos programadores podem se beneficiar mais se lerem este livro do princípio até o final, incluindo as instruções passo a passo para compilar e rodar seu primeiro programa no Capítulo 1, “Dando a Partida”. Programadores experientes em linguagens procedimentais, como a C podem querer começar com o material sobre os conceitos e recursos orientados a objeto da linguagem de programação Java. Book_The Java Tutorial_PFCG.indb 22 29/06/2015 15:15:15 Prefácio xxiii Programadores experientes podem preferir mergulhar em tópicos mais avançados como genéricos, concorrência ou distribuição. Este livro contém informações dirigidas para as necessidades de aprendizagem de programadores com variados níveis de experiência. Como Usar Este Livro Este livro foi projetado para que possa lê-lo desde o início até o fim, ou pular de tópico em tópico. A informação é apresentada em uma ordem lógica e referências a assuntos futuros são evitadas sempre que possível. Os exemplos neste livro são compilados conforme a versão JDK 7. Você precisa baixar esta versão (ou mais atual) para compilar e rodar a maioria dos exemplos. Parte do material neste livro está disponível online (p. ex. os exemplos que podem ser baixados, as respostas das perguntas e soluções dos exercícios, os guias JDK 7, e a especificação API). Você verá notas de rodapé como as seguintes: 7/docs/api/java/lang/Class.html e tutorial/java/generics/examples/BoxDemo.java Este livro não seria o que é sem a ajuda da equipe de engenharia da Oracle Java que incansavelmente revisou o conteúdo técnico da nossa redação. Para esta edição deste livro, queremos agradecer especialmente a Alan Bateman, Alex Buckley, Calvin Cheung, Maurizio Cimadamore, Joe Darcy, Andy Herrick, Stuart Marks, Igor Nekrestynov, Thomas Ng, Nam Nguyen e Daniel Smith. Os ilustradores Jordan Douglas e Dawn Tyler criaram nossos gráficos profissionais rápida e eficientemente. Devika Gollapudi forneceu sua inestimável assistência na captura das nossas telas para publicação. As editoras Deborah Owens e Susan Shepard fizeram uma cuidadosa e completa revisão em nosso trabalho sobre JDK 7. Obrigado pelo apoio de nossa equipe: Bhavesh Patel, Devika Gollapudi e Santosh La. E, por último, mas não menos importante, obrigado pelo apoio de nossa gerência: Alan Sommerer, conosco desde o início, Barbara Ramsey, Sophia Mikulinsky e Sowmya Kannan, recentemente promovida a gerente do nosso time. Book_The Java Tutorial_PFCG.indb 23 29/06/2015 15:15:15 1 Dando a Partida Conteúdo do Capítulo O Fenômeno da Tecnologia Java 1 A Aplicação “Hello World!” 5 Um Olhar Mais de Perto na Aplicação “Hello World!” 22 Problemas Comuns (e Suas Soluções) 25 Perguntas e Exercícios: Dando a Partida 29 Este capítulo oferece tudo que você precisa para dar a partida no aprendizado da linguagem de programação Java. O primeiro tópico traz uma visão geral da tecnologia Java como um todo. Ele discute tanto a linguagem quanto a plataforma Java, fornecendo uma visão geral ampla do que esta tecnologia pode fazer e como ela fará sua vida mais fácil. O segundo tópico traz informações para a criação da aplicação “Hello World!”. Esta abordagem prática descreve o que baixar, instalar e digitar ao criar uma simples aplicação “Hello World!”. O tópico oferece instruções separadas para o ambiente de desenvolvimento integrado NetBeans (NetBeans IDE), Microsoft Windows, Solaris, e Linux. A terceira parte discute a aplicação “Hello World!”, descrevendo cada parte do código em detalhe. Ela cobre comentários do código-fonte, o bloco de definição da classe HelloWorldApp, e o método main. A quarta parte apresenta os problemas mais comuns e suas soluções. Ela deve ser lida quando encontrar dificuldade em compilar e rodar os programas apresentados neste capítulo. Por fim, perguntas e exercícios para testar seu entendimento. O Fenômeno da Tecnologia Java As referências à tecnologia Java estão em todos os lugares, mas exatamente o que é isto? Esta parte explica como a tecnologia Java é ao mesmo tempo uma linguagem de programação e uma plataforma, e traz uma visão geral do que esta tecnologia pode fazer por você. 1 Book_The Java Tutorial_PFCG.indb 1 29/06/2015 15:15:15 Capítulo 1 2 1 n Dando a Partida A Linguagem de Programação Java A linguagem de programação Java é uma linguagem de alto nível que pode ser caracterizada pelas seguintes palavras-chave: Simples Orientada a Objeto Distribuível Multitarefa Dinâmica Arquitetura Neutra Portável Alta Performance Robusta Segura Cada uma destas palavras-chave é explicada no documento The Java Language Environment (O Ambiente da Linguagem Java)1, escrito por James Gosling e Henry McGilton1. Na linguagem de programação Java, todos os códigos-fonte são escritos primeiro em arquivos de texto terminando com a extensão .java, estes arquivos de texto são então compilados para arquivos .class pelo compilador javac. Um arquivo .class não contém código nativo de seu processador, mas sim bytecodes – a linguagem da Java Virtual Machine (Java VM)2. A ferramenta de lançamento java, então, processa sua aplicação como um objeto específico de uma classe, na Máquina Virtual Java. Como a Java Virtual Machine está disponível em muitos sistemas operacionais, os mesmos arquivos .class são capazes de rodar em sistemas Microsoft Windows, Solaris, Linux, e Mac OS X. Algumas máquinas virtuais Java, como a Java HotSpot Virtual Machine realiza algumas etapas adicionais em tempo real para incrementar a performance de sua aplicação3. Isto inclui várias tarefas tais como encontrar gargalos de performance e recompilar (para o código nativo) trechos frequentemente usados do código. A Plataforma Java Uma plataforma é um ambiente de hardware e software em que um programa é processado. Já mencionamos diversas plataformas mais populares como Microsoft Windows, 1. http://www.oracle.com/technetwork/java/langenv-140151.html 2. Os termos Java Virtual Machine (MáquinaVirtual Java) e Java VM indicam uma máquina virtual para a plataforma Java. 3. http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136373.html Book_The Java Tutorial_PFCG.indb 2 29/06/2015 15:15:15 O Fenômeno da Tecnologia Java 3 Linux, Solaris e Mac. Muitas plataformas podem ser descritas como uma combinação do sistema operacional e o hardware compatível. A plataforma Java difere da maioria das demais, por ser uma plataforma somente de software, que roda acima das demais plataformas baseadas em hardware. A plataforma Java tem dois componentes: A Máquina Virtual Java (JVM – Java Virtual Machine) A API Java (Interface de Programação de Aplicações Java) 1 Você já foi apresentado à Maquina Virtual Java; é a base para a plataforma Java e é utilizável sobre várias plataformas baseadas em hardware. Figura 1.1 Uma Visão Geral do Processo de Desenvolvimento de Software Figura 1.2 Através da Máquina Virtual Java, a Mesma Aplicação é Capaz de Rodar em Múltiplas Plataformas Book_The Java Tutorial_PFCG.indb 3 29/06/2015 15:15:16 Capítulo 1 4 1 n Dando a Partida A API é uma grande coleção de componentes de programas pré-prontos, que permitem muitos recursos úteis. É agrupado em bibliotecas de classes relacionadas e interfaces; estas bibliotecas são conhecidas como packages (pacotes). A próxima seção “O que a Tecnologia Java Pode Fazer?” ressalta algumas das funcionalidades da API. Como um ambiente independente de plataforma, a plataforma Java pode ser um pouco mais lenta do que o código nativo. Contudo, avanços na tecnologia do compilador e da máquina virtual estão tornando a a performance próxima de um desempenho com o código nativo, sem ameaçar a portabilidade. O Que a Tecnologia Java Pode Fazer? A linguagem de programação Java, de alto nível e aplicações gerais, é uma poderosa plataforma de software. Cada implementação completa da plataforma Java oferece os seguintes recursos: Ferramentas de Desenvolvimento. As ferramentas de desenvolvimento trazem tudo o que você precisa para compilar, processar, rastrear erros (debugging), e documentar sua aplicação. Como um novo desenvolvedor, as principais ferramentas que vai usar são o compilador javac, o lançador java, e a ferramenta de documentação javadoc. API. A API fornece o núcleo central da funcionalidade da linguagem de programação Java, oferecendo um amplo conjunto de classes prontas para uso em suas aplicações. Ela abrange tudo, desde objetos básicos, a processamento em rede, segurança, geração XML (Extensible Markup Language), acesso a bancos de dados, e mais. O núcleo da API é bastante extenso; para ter uma ideia do seu conteúdo, consulte a Documentação da Plataforma Java Standard Edition (Java SE) 74 Tecnologias de Distribuição. O software Java SE Development Kit – Kit de Desenvolvimento Java SE (JDK) oferece mecanismos básicos como o software Java Web Start e o software Java Plug-in para a distribuição de suas aplicações para os usuários finais. Ferramentas de interface de Usuário. Os conjuntos de ferramentas Java FX, Swing, e Java 2D possibilitam a criação de sofisticadas interfaces gráficas de usuário (Graphical User Interfaces – GUIs). Bibliotecas de Integração como API Java IDL (Java Interactive Data Language – Linguagem de Dados Interativa), API Java JDBC (Java Database Connectivity– Java Conectividade de Base de Dados), API Java JNDI (Java Naming and Directory Interface–Interface Java de Nomenclatura e Diretório), Java RMI (Remote Method Invocation–Método de Invocação Remota), e Tecnologia Java RMI-IIOP (Java Remote Method Invocation over Internet Inter-ORB Technology, permitem o acesso e a manipulação de dados remotos. Como a Tecnologia Java Pode Mudar a Minha Vida? Não podemos prometer fama, fortuna, ou sequer um emprego, se você aprender a linguagem de programação Java. Ainda assim, é provável que ela torne seus programas melhores e requeiram menos esforço que outras linguagens. Acreditamos que a tecnologia Java vai lhe ajudar a: 4. 7/docs/index.html Book_The Java Tutorial_PFCG.indb 4 29/06/2015 15:15:16 A Aplicação “Hello World!” 5 1 Figura 1.3 A API e a Máquina Virtual Java Isolam o Programa, do Hardware Subjacente Começar rapidamente. Apesar de a linguagem Java ser uma poderosa linguagem orientada a objeto, é fácil de aprender, especialmente para programadores já familiarizados com C ou C++. Escrever menos código. Comparações de contagens em programas (contagem de classes, contagem de métodos, e assim por diante) sugerem que programas escritos na linguagem de programação Java podem ser quatro vezes menores que os mesmos programas escritos em C++. Escrever um código melhor. A linguagem de programação Java estimula as boas práticas de codificação, e a coleta automática do lixo o ajuda a evitar problemas de memória. Sua orientação a objetos, sua arquitetura de componentes JavaBeans, e a sua API de amplo alcance e facilmente extensível permitem a reutilização de códigos existentes e testados, ajudando, assim, o surgimento de menos bugs. Desenvolver programas mais rapidamente. A linguagem de programação Java é mais simples que C++ e, portanto, seu tempo de desenvolvimento pode ser até duas vezes menor ao escrever com ela. Seus programas também vão requerer menos linhas de código. Evitar dependência de plataformas. Você pode manter seu programa portátil, evitando o uso de bibliotecas escritas em outras linguagens. Escrever uma vez e rodar em qualquer lugar. Como as aplicações escritas na linguagem de programação Java são compiladas em bytecodes independentes de máquinas, eles rodam de forma consistente em qualquer plataforma Java. Distribuir software mais facilmente. Com o software Java Web Start, os usuários são capazes de abrir suas aplicações com um clicar de mouse. Uma verificação automática de versão na abertura assegura que os usuários estejam sempre atualizados com a última versão de seu software. Se uma atualização estiver disponível, o software Java Web Start faz a atualização automaticamente. A Aplicação “Hello World!” Este tópico oferece instruções detalhadas para compilar e processar uma aplicação simples “Hello World!” (Olá, Mundo). Ela traz informações sobre como começar com a IDE NetBeans, um Book_The Java Tutorial_PFCG.indb 5 29/06/2015 15:15:17 Capítulo 1 6 1 n Dando a Partida ambiente de desenvolvimento integrado que facilita em muito o processo de desenvolvimento do software. A IDE NetBeans roda em todas as plataformas populares; instruções específicas da plataforma são fornecidas para começar sem uma IDE. Primeiro, fornecemos instruções para usuários da IDE NetBeans. A IDE NetBeans roda na plataforma Java, o que significa que pode ser usada para qualquer sistema operacional para o qual exista um JDK 7 (Java Development Kit) disponível. Recomendamos que utilize a IDE NetBeans, em vez de utilizar a linha de comando, sempre que possível. Em seguida, damos instruções de linha de comando para usuários do Microsoft Windows. Também fornecemos instruções de linhas de comando para os usuários de Solaris e Linux. Finalmente, relacionamos alguns problemas comuns (e suas soluções); consulte o final deste tópico caso tenha problemas ao compilar ou processar sua aplicação. “Hello World!” para a IDE NetBeans É hora de escrever sua primeira aplicação! Estas instruções detalhadas são para usuários da IDE NetBeans. Como mencionado anteriormente, a IDE NetBeans roda na plataforma Java; você pode usá-la com qualquer sistema operacional para o qual exista um JDK 7 disponível. Uma Lista de Verificação Para escrever seu primeiro programa, você vai precisar do seguinte: 1. O Kit de Desenvolvimento Java (JDK 7 foi selecionado para este exemplo). Para obter este kit para todas as plataformas, consulte o Java SE Downloads Index.5 2. A IDE NetBeans. Para obter esta IDE para todas as plataformas, consulte o NetBeans Downloads Index6. Criando Sua Primeira Aplicação Sua primeira aplicação HelloWorldApp, simplesmente vai exibir a saudação “Hello World!”. Para criar este programa, faça o seguinte: 1. Crie um projeto IDE. Ao criar um projeto IDE, você cria um ambiente no qual possa construir e rodar suas aplicações. Usar projetos IDE elimina questões de configuração normalmente associadas com o desenvolvimento na linha de comando. É possível construir e rodar sua aplicação escolhendo um único item de menu dentro da IDE. 2. Adicione código ao arquivo-fonte gerado. Um arquivo-fonte contém código, escrito na linguagem de programação Java, que você e outros programadores podem en- 5. http://www.oracle.com/technetwork/java/javase/downloads/index.html 6. http://netbeans.org/downloads/index.html Book_The Java Tutorial_PFCG.indb 6 29/06/2015 15:15:17 A Aplicação “Hello World!” 7 tender. Como parte da criação de um projeto IDE, um esqueleto de arquivo-fonte será automaticamente gerado. Basta modificar o arquivo-fonte, para acrescentar a mensagem “Hello World!”. 1 3. Compile o arquivo-fonte para um arquivo .class. A IDE invoca o compilador da linguagem de programação Java (javac), que pega seu arquivo-fonte e traduz seu texto em instruções que a Máquina Virtual Java consegue entender. As instruções contidas dentro deste arquivo compilado são conhecidas como bytecodes. 4. Rode o programa. A IDE invoca a ferramenta Java de lançamento (java), que usa a Máquina Virtual Java para rodar sua aplicação. Crie um Projeto IDE Para criar um projeto IDE, faça o seguinte: 1. Abra o NetBeans IDE No sistema Microsoft Windows, use o item NetBeans IDE, no menu Start. Nos sistemas Solaris e Linux, execute o script de lançamento navegando para o diretório bin da IDE e digitando ./netbeans. No sistema Mac OS X, clique no ícone da aplicação NetBeans IDE. 2. Na tela inicial do NetBeans IDE, escolha File e então selecione New Project (Figura 1.4). 3. No Assistente New Project, expanda a categoria Java e selecione Java Application (Figura 1.5). 4. Na página Name and Location do Assistente, faça o seguinte (Figura 1.6): Figura 1.4 A IDE NetBeans com o Item do Menu New Project Selecionado Book_The Java Tutorial_PFCG.indb 7 29/06/2015 15:15:18 Capítulo 1 8 n Dando a Partida 1 Figura 1.5 A IDE NetBeans, Assistente New Project, Página Choose Project (Escolha Projeto) Figura 1.6 A IDE NetBeans, Assistente New Project, Página Name and Location Book_The Java Tutorial_PFCG.indb 8 29/06/2015 15:15:19 A Aplicação “Hello World!” 9 No campo Project Name, digite Hello World App. 1 No campo Create Main Class, digite helloworldapp.HelloWorldApp. Marque a caixa de seleção Set as Main Project 5. Clique em Finish. O projeto foi criado e aberto na IDE (Figura 1.7). Você deverá ver os seguintes componentes: A janela de Projetos, contendo uma vista em árvore dos componentes do projeto, incluindo arquivo-fonte, bibliotecas das quais o seu código depende, etc. A janela Source Editor (Editor de Arquivo-Fonte), com um arquivo chamado HelloWorldApp aberto. A janela de Navegação, que pode ser usada para navegar rapidamente entre elementos dentro da classe selecionada. Adicione JDK 7 à Lista da Plataforma (Se Necessário) Pode ser que seja necessário adicionar JDK 7 na lista de plataformas disponíveis da IDE. Para fazer isto, escolha Tools e ,então, selecione Java Platforms, como mostrado na Figura 1.8. Se não visualizar JDK 7 (que pode aparecer como 1.7 ou 1.7.0) na lista de plataformas instaladas, clique em Add Platform, navegue para seu diretório de instalação do JDK 7, e clique Finish. Agora deve ser possível visualizar a nova plataforma acrescentada, mostrada na Figura 1.9. Para configurar este JDK como default para todos os projetos, você pode rodar a IDE com o switch --jdkhome na linha de comando. Também é possível fazer isto entrando com o caminho para o JDK na propriedade netbeans_j2sdkhome do seu arquivo INSTALLATION_DIRECTORY/etc/netbeans.conf. Para especificar este JDK para somente este projeto em particular, selecione Hello World App no painel de Projetos, escolha File e, então, selecione Project Properties (Hello World App), clique em Libraries, e depois selecione JDK 7 no menu de seleção da Plataforma Java. Deve surgir uma tela similar à da Figura 1.10. A IDE está agora configurada para JDK 7. Figura 1.7 A IDE NetBeans com o Projeto HelloWorldApp Aberto Book_The Java Tutorial_PFCG.indb 9 29/06/2015 15:15:19 Capítulo 1 10 1 n Dando a Partida Adicione Código ao Arquivo-fonte Gerado Quando criou este projeto, você deixou a caixa de seleção Create Main Class selecionada no assistente New Project. A IDE criou ,portanto, um esqueleto de classe. Você pode adicionar a mensagem “Hello World!” ao esqueleto de código substituindo a linha Figura 1.8 Selecionando o Java Platform Manager no Menu Tools Figura 1.9 O Gerenciador de Plataforma Java (Java Platform Manager) Book_The Java Tutorial_PFCG.indb 10 29/06/2015 15:15:20 A Aplicação “Hello World!” 11 1 Figura 1.10 A Categoria Libraries nas Propriedades do Projeto Hello World App com a linha Opcionalmente, você pode substituir estas quatro linhas do código gerado por estas linhas Estas quatro linhas são um comentário de código e não afetam a forma como programa é executado. Os próximos tópicos deste capítulo explicam o uso e formato dos comentários de código. Book_The Java Tutorial_PFCG.indb 11 29/06/2015 15:15:22 Capítulo 1 12 1 n Dando a Partida Nota Digite todos os códigos, comandos, e nomes de arquivo exatamente como mostrado. Tanto o compilador (javac) como o lançador (java) são sensíveis a maiúsculas e minúsculas, portanto use maiúsculas e minúsculas de maneira adequada. Por exemplo, HelloWorldApp não é o mesmo que helloworldapp. Salve suas alterações selecionando File e depois Save. O arquivo deve ficar parecido com o seguinte: Compile o Arquivo-Fonte para um Arquivo .class Para compilar seu arquivo-fonte, no Menu principal da IDE, selecione Run e depois Build Main Project. A janela de Saída abre e mostra uma saída similar a Figura 1.11. Se a saída construída terminar com a declaração BUILD SUCCESFULL, então parabéns! Você compilou seu programa! Se a saída da construção finaliza com a declaração BUILD FAILED, provavelmente houve um erro de sintaxe em seu código. Os erros são relatados na janela de Saída como texto com hiperlink. Dê um duplo clique no hiperlink para navegar para a origem do erro. Então, você pode corrigir o erro e repetir mais uma vez selecionando Run e depois Build Main Project. Ao construir o projeto, o arquivo em bytecode HelloWorldApp.class é gerado. É possível visualizar onde o novo arquivo é gerado abrindo a janela Files e expandindo o item Hello World App/build/classes/helloworldapp, como mostrado na figura 1.12. Agora que você construiu o projeto, é só rodar seu programa. Rode o programa A partir da barra de Menu da IDE, selecione Run e depois Run Main Project. A Figura 1.13 mostra o que será visualizado. Parabéns, seu programa funciona! Book_The Java Tutorial_PFCG.indb 12 29/06/2015 15:15:22 A Aplicação “Hello World!” 13 1 Figura 1.11 Janela de Saída Mostrando os Resultados da Construção do Projeto HelloWorldApp Figura 1.12 Janela de Arquivos Mostrando o Arquivo .class Gerado Figura 1.13 O Programa exibe “Hello World!” na Janela de Saída (Junto com Outras Saídas do Script de Construção) Book_The Java Tutorial_PFCG.indb 13 29/06/2015 15:15:23 Capítulo 1 14 1 n Dando a Partida Continuando com a IDE NetBeans O restante deste capítulo explica o código desta aplicação simples. Os capítulos que se seguem vão mais fundo no núcleo de recursos da linguagem e fornecem muito mais exemplos. Apesar do restante deste livro não dar instruções específicas sobre o uso da IDE NetBeans, você pode facilmente usar a IDE para escrever e rodar o código de amostra. A seguir estão algumas indicações sobre o uso da IDE e explicações sobre alguns comportamentos da IDE que provavelmente verá: Uma vez que tenha criado um projeto na IDE, é possível adicionar arquivos ao projeto, usando o assistente New File. Selecione File e depois New File, e escolha um template no assistente, tal como o template Empty Java File (Arquivo Vazio Java). Você pode compilar e rodar um arquivo individual (em oposição a um projeto completo) usando os comandos Compile File (F9) e Run File (Shift+F6) da IDE. Se usar o comando Run Main Project, a IDE rodará o arquivo que a IDE associa como a classe principal do projeto principal. Portanto, se criar uma classe adicional no seu projeto HelloWorldApp e tentar rodar aquele arquivo com o comando Run Main Project, a IDE vai rodar o arquivo HelloWorldApp. É possível que você queira criar projetos IDE separados para aplicações de amostra que incluam mais do que um arquivo-fonte. Ao digitar na IDE, uma caixa de complementação de código pode aparecer periodicamente. Você pode ignorar a complementação do código e continuar digitando ou selecionar uma das expressões sugeridas. Se preferir que a caixa de complementação de código não apareça automaticamente, desative o recurso. Selecione Tools, depois Options, e então Editor. Clique na aba Code Completion, e limpe a janela Auto PopUp Completion Window na caixa de seleção. Se quiser renomear o nó para um arquivo-fonte na janela Projects, selecione Refactor no menu principal da IDE. A IDE apresenta uma caixa de diálogo Rename e o conduz através das opções de renomeação da classe e atualização do código que se refere àquela classe. Faça as alterações e clique Refactor para aplicar as mudanças. Esta sequencia de cliques pode parecer desnecessária se só há uma simples classe no seu projeto, mas é bastante útil quando suas mudanças afetam outras partes do seu código, em projetos maiores. Para um guia mais abrangente dos recursos da IDE NetBeans, veja a página de NetBeans Documentation7 “Hello World! para o Microsoft Windows É hora de escrever sua primeira aplicação. As instruções seguintes são para usuários do Windows. 7. http://www.netbeans.org/kb/index.html Book_The Java Tutorial_PFCG.indb 14 29/06/2015 15:15:23 A Aplicação “Hello World!” 15 Uma Lista de Verificação 1 Para escrever seu primeiro programa, você precisará do seguinte: 1. JDK 7. Baixe a a versão para Windows.8 (Certifique-se de baixar o JDK, e não o Java Runtime Environment, ou JRE). Consulte as instruções.9 2. Um editor de texto. Neste exemplo, usaremos o NotePad, um editor simples incluído nas plataformas Windows. É possível adaptar facilmente estas instruções, caso você utilize um editor de texto diferente. Estes dois itens são tudo que você precisa para escrever sua primeira aplicação. Criando sua Primeira Aplicação Sua primeira aplicação, HelloWorldApp, vai simplesmente exibir a saudação “Hello, World!”. Para criar este programa, faça o seguinte: 1. Crie um arquivo-fonte. Um arquivo-fonte contém código, escrito na linguagem de programação Java, que você e outros programadores podem entender. É possível usar qualquer editor de texto para criar e editar arquivos-fonte. 2. Compile o arquivo-fonte para um arquivo .class. O compilador da linguagem de programação Java (javac) pega o seu código e traduz seu texto em instruções que a Máquina Virtual Java pode entender. Como mencionado anteriormente, as instruções contidas neste arquivo são conhecidas como bytecodes. 3. Rode o programa. A ferramenta de lançamento Java (java) usa a Máquina Virtual Java para rodar sua aplicação. Crie um Arquivo-Fonte Para criar um arquivo-fonte, existem duas opções: salvar o arquivo HelloWorldApp. java no seu computador e evitar um bocado de digitação ou usar as seguintes (e mais longas) instruções. Primeiro, abra seu editor, tal como o NotePad. Em um documento novo digite o seguinte código: 8. http://www.oracle.com/technetwork/java/javase/downloads/index.html 9. 7/docs/webnotes/install Book_The Java Tutorial_PFCG.indb 15 29/06/2015 15:15:24 Capítulo 1 16 1 n Dando a Partida Nota Digite todos os códigos, comandos, e nomes de arquivo exatamente como mostrado. Tanto o compilador (javac) como o lançador (java) são sensíveis a maiúsculas e minúsculas, portanto utilize maiúsculas e minúsculas de forma apropriada. Por exemplo, HelloWorldApp não é o mesmo que helloworldapp. Salve o código em um arquivo com o nome HelloWorlApp.java. Para fazer isto no NotePad, na barra de menu, selecione File e depois Save As. Então, na caixa de diálogo Save As, faça o seguinte: 1. Usando o Save na caixa de combinação, especifique a pasta (diretório) onde salvará seu arquivo. Neste exemplo, o diretório é Java no drive C. 2. No campo de Nome do arquivo digite “HelloWorldApp.java”, incluindo as aspas. 3. Na caixa de combinação Save as type, escolha Text Document (*.txt) 4. Na caixa de combinação Encoding, deixe a codificação como ANSI. Quando tiver terminado, a caixa de diálogo deve parecer como na Figura 1.14. Agora clique Save, e saia do NotePad. Compile o Arquivo-Fonte para um Arquivo .class Abra a janela shell, ou janela “de comando”. Isto pode ser feito a partir do menu Start (Iniciar), escolhendo Command Prompt ou escolhendo Run... e digitando cmd. A janela shell deve ser similar à da Figura 1.15. O prompt mostra seu diretório atual. Ao abrir o prompt, seu diretório atual é, em geral, seu diretório principal, como mostrado na Figura 1.15 Para compilar seu arquivo-fonte, mude o diretório atual para o diretório onde o seu arquivo está localizado. Por exemplo, se o seu diretório fonte é java, no drive C, digite o seguinte comando no prompt, e aperte Enter: Agora o prompt deve mudar para C:\java>. Nota Para mudar para um diretório em um drive diferente, digite um comando adicional: o nome do drive. Por exemplo, para mudar para o diretório java no drive D, digite D:, como mostrado na Figura 1.16 Book_The Java Tutorial_PFCG.indb 16 29/06/2015 15:15:24 A Aplicação “Hello World!” 17 1 Figura 1.14 A Caixa de Diálogo Save As, Logo Antes de Você Clicar em Save Figura 1.15 Uma Janela de Shell Figura 1.16 Mudando o Diretório para um Drive Alternativo Book_The Java Tutorial_PFCG.indb 17 29/06/2015 15:15:25 Capítulo 1 18 1 n Dando a Partida Ao digitar dir no prompt, você deve ver seu arquivo-fonte, como mostra a Figura 1.17. Agora você está pronto para compilar. No prompt, digite o seguinte comando e aperte Enter; O compilador gerou um arquivo bytecode, HelloWorldApp.class. No prompt, digite dir para ver o novo arquivo que foi gerado, com mostrado na Figura 1.18. Agora que você tem um arquivo .class, é só rodar o programa. Rode o Programa No mesmo diretório, entre com o seguinte comando no prompt: A Figura 1.19 mostra o que será visualizado. Parabéns! Seu programa funciona! Se encontrar problemas com as instruções neste ou em quaisquer passos deste tópico, consulte a seção “Problemas Comuns (e Suas Soluções)” ao final deste capítulo. “Hello World!” para Solaris e Linux É hora de escrever sua primeira aplicação. As instruções seguintes são para usuários do Solaris e Linux. Uma Lista de Verificação Para escrever seu primeiro programa, você precisará do seguinte: Figura 1.17 Listagem do Diretório Mostrando o Arquivo-Fonte .java Book_The Java Tutorial_PFCG.indb 18 29/06/2015 15:15:26 A Aplicação “Hello World!” 19 1 Figura 1.18 Listagem do Diretório Mostrando o Arquivo .class Gerado Figura 1.19 O Programa exibe “Hello, World!” na tela 1. JDK 7. Baixe a versão para Solaris ou Linux.10 (Certifique-se de baixar o JDK, e não o JRE). Consulte as instruções de instalação.11 2. Um editor de texto. Neste exemplo, usaremos o pico, um editor disponível para muitas plataformas baseadas em UNIX. É possível adaptar facilmente estas instruções caso utilize um editor de texto diferente, como vi ou emacs. Estes dois itens são tudo que você precisa para escrever sua primeira aplicação. Criando sua Primeira Aplicação Sua primeira aplicação, HelloWorldApp, vai simplesmente exibir a saudação “Hello World!”. Para criar este programa, faça o seguinte: 1. Crie um arquivo-fonte. Um arquivo-fonte contém código, escrito na linguagem de programação Java, que você e outros programadores entendem. É possível usar qualquer editor de texto para criar e editar arquivos-fonte. 10. http://www.oracle.com/technetwork/java/javase/downloads/index.html 11. 7/docs/webnotes/install Book_The Java Tutorial_PFCG.indb 19 29/06/2015 15:15:27 20 1 Capítulo 1 n Dando a Partida 2. Compile o arquivo-fonte para um arquivo .class. O compilador da linguagem de programação Java (javac) traduz o código e o texto em instruções que a Máquina Virtual Java pode entender. Como mencionado anteriormente, as instruções contidas neste arquivo são conhecidas como bytecodes. 3. Rode o programa. A ferramenta de lançamento Java (java) usa a Máquina Virtual Java para rodar sua aplicação. Crie um Arquivo-Fonte Para criar um arquivo-fonte, existem duas opções: salvar o arquivo HelloWorldApp. java no seu computador e evitar um bocado de digitação ou usar as seguintes (e mais longas) instruções. Primeiro, abra a janela de shell, ou “terminal”, mostrada na Figura 1.20. Ao receber o prompt, seu diretório atual será, normalmente, seu diretório inicial. É possível mudar seu diretório atual para o diretório principal a qualquer tempo, digitando cd no prompt e apertando Return. Os arquivos-fonte criados devem ser mantidos em um diretório à parte. Crie um diretório usando o comando mkdir. Por exemplo, para criar o diretório examples/java no diretório /tmp (temporário), use os seguintes comandos: Para mudar seu diretório atual para este novo diretório, entre com o comando: Agora você pode começar a criar o seu arquivo-fonte. Abra seu editor pico digitando pico no prompt e apertando Return. Se o sistema responder com a mensagem pico: command not found, provavelmente o pico não está disponível. Consulte seu administrador do sistema para mais informações ou use outro editor. Ao iniciar o pico, ele exibirá um novo buffer vazio. Esta é a área onde deve ser digitado o código. Digite o seguinte código no buffer: Figura 1.20 Uma Janela Terminal Nova Book_The Java Tutorial_PFCG.indb 20 29/06/2015 15:15:27 A Aplicação “Hello World!” 21 1 Nota Digite todos os códigos, comandos e nomes de arquivo exatamente como mostrado. Tanto o compilador (javac) como o lançador (java) são sensíveis a maiúsculas e minúsculas, portanto use-as de maneria adequada. Por exemplo, HelloWorldApp não é o mesmo que helloworldapp. Salve o código em um arquivo com o nome HelloWorldApp.java. No editor pico, isto pode ser feito digitando Ctrl+O e na parte inferior onde está o prompt File Name to Write:, entrando com o diretório em que deseja criar o arquivo, seguido por HelloWorldApp.java. Por exemplo, se deseja salvar HelloWorldApp.java no diretório /tmp/exemplos/java, digite /tmp/exemplos/java/HelloWorldApp.java e aperte Return. Para sair do pico, digite Ctrl+X . Compile o Arquivo-Fonte para um Arquivo .class Abra uma nova janela de shell. Para compilar seu arquivo-fonte, mude seu diretório atual para o diretório onde o arquivo está localizado. Por exemplo, se o diretório onde está o arquivo-fonte é /tmp/exemplos/java, digite o seguinte comando no prompt e aperte Return: Ao entrar com o comando pwd (print working directory) no prompt, é possível visualizar o diretório atual, que neste exemplo foi mudado para /tmp/exemplos/java. Ao entrar com o comando ls (list) no prompt, seu arquivo será visualizado. Agora você está pronto para compilar o arquivo-fonte. No prompt, digite o seguinte comando, e depois aperte Return: Figura 1.21 Resultados do Comando ls Mostrando o Arquivo-Fonte .java Book_The Java Tutorial_PFCG.indb 21 29/06/2015 15:15:28 Capítulo 1 22 n Dando a Partida 1 Figura 1.22 Resultados do Comando ls Mostrando o Arquivo .class Gerado Figura 1.23 A Saída Imprime “Hello World!” na Tela O compilador gerou um arquivo bytecode, HelloWorldAp.class. No prompt, digite ls para ver o novo arquivo que foi gerado, como mostrado na Figura 1.22. Agora que você tem um arquivo .class, é só rodar o programa. Rode o Programa No mesmo diretório, entre com o seguinte comando no prompt: A Figura 1.23 mostra o que será visualizado. Parabéns! Seu programa funciona! Um Olhar Mais de Perto na Aplicação “Hello World!” Agora que já conhece a aplicação “Hello World!” (e talvez a tenha compilado e rodado), pode estar imaginando como ela funciona. Aqui está mais uma vez o código: Book_The Java Tutorial_PFCG.indb 22 29/06/2015 15:15:29 Um Olhar Mais de Perto na Aplicação “Hello World!” 23 A aplicação “Hello World” consiste de três componentes primários: comentários do código-fonte, a definição da classe HelloWorldApp, e o método principal (main). A explicação a seguir lhe dará um entendimento básico do código, mas as implicações mais profundas só ficarão mais claras depois que concluir a leitura deste livro. 1 Comentários do Código Fonte Os seguintes textos em negrito definem os comentários da aplicação “Hello World!”: Os comentários são ignorados pelo compilador, mas são úteis para outros programadores. A linguagem de programação Java suporta três tipos de comentários: /* texto */ O compilador ignora tudo desde /* até */. /** documentação */ Isto indica um comentário de documentação (documen- tation comment – doc comment, de forma abreviada). O compilador ignora este tipo de comentário, da mesma forma que ignora comentários que usam /* e */. A ferramenta Javadoc usa os comentários de documentação quando está preparando a documentação automaticamente gerada. Para mais informações sobre o Javadoc, veja o Javadoc Tool Documentation.12 // texto O compilador ignora tudo desde // até o final da linha. A Definição da Classe HelloWorldApp O seguinte texto em negrito começa o bloco de definição de classe para a Aplicação “Hello World!” 12. 7/docs/technotes/guides/javadoc/index.html. Book_The Java Tutorial_PFCG.indb 23 29/06/2015 15:15:30 24 Capítulo 1 n Dando a Partida 1 Como mostrado previamente, a forma mais básica de uma definição de classe é como a seguir: A palavra-chave class começa a definição de classe para uma classe chamada nome e o código para cada classe aparece entre a abertura e o fechamento das chaves marcadas em negrito. O Capítulo 2 traz uma visão geral das classes em geral e o Capítulo 4 discute as classes em detalhe. Por agora, é suficiente saber que cada aplicação começa com uma definição de classe. O Método main (Principal) O seguinte texto em negrito começa a definição do método main: Na linguagem de programação Java, cada aplicação deve conter um método main, cuja signature (assinatura) é a seguinte: Os modificadores public e static podem ser escritos em qualquer ordem (public static ou static public), mas o convencional é usar public static, como mos- trado aqui. Você pode nomear o argumento com qualquer coisa que quiser, mas a maioria dos programadores escolhe args (arguments – argumentos) ou argv (argument values – valores de argumentos). O método main é similar à função main nas linguagens C e C++; é o ponto de entrada para sua aplicação e subsequentemente invocará todos os outros métodos requeridos pelo seu programa. O método main aceita um argumento único: um array de elementos do tipo String. Este array é o mecanismo através do qual o sistema de runtime passa informações para sua aplicação. Aqui está um exemplo: Book_The Java Tutorial_PFCG.indb 24 29/06/2015 15:15:31 Problemas Comuns (e Suas Soluções) 25 1 Cada string no array é chamada de um argumento de linha de comando (command-line argument). Argumentos de linha de comando permitem aos usuários afetarem a operação da aplicação sem terem que recompilá-la. Por exemplo, um programa de classificação poderia permitir o usuário especificar que os dados sejam classificados em ordem descendente com este argumento de linha de comando: A aplicação “Hello World!” ignora seus argumentos de linha de comando, mas esteja ciente de que tais argumentos existem. Finalmente, veja a seguinte linha: Ela usa a classe System da biblioteca central para imprimir a mensagem “Hello World!” na saída padrão. Partes desta biblioteca (também conhecida como Interface de Programação da Aplicação - Application Programming Interface ou API) serão discutidas em capítulos posteriores. Problemas Comuns (e Suas Soluções) Problemas no Compilador Mensagens de Erro Comuns nos Sistemas Microsoft Windows Se receber este erro, significa que o Windows não consegue achar o compilador (javac). Para dizer ao Windows onde encontrar o javac, supondo que o JDK esteja instalado em C:\jdkl.7.0, digite no prompt o seguinte comando, seguido de Enter: Se escolher esta opção, você terá que começar seus comandos javac e java com C:\ jdk1.7.0\bin\ cada vez que compilar ou rodar um programa. Para evitar esta digitação extra, consulte as instruções de instalação do JDK 7.13 Se receber este erro, significa que esqueceu de incluir o sufixo .java ao compilar o programa; o comando é javac HelloWorldApp.java e não javac HelloWorldApp. 13. 7/docs/webnotes/install/windows/jdk-installation-windows.html#path Book_The Java Tutorial_PFCG.indb 25 29/06/2015 15:15:32 26 1 Capítulo 1 n Dando a Partida Mensagens de Erro Comuns nos Sistemas UNIX Se receber este erro, significa que o UNIX não conseguiu encontrar o compilador javac. Para dizer ao UNIX onde encontrar o javac, supondo que o JDK esteja instalado em /usr/local/jdk1.7.0, digite no prompt o seguinte comando, seguido de Enter: Se escolher esta opção, cada vez que compilar ou rodar um programa , você terá que começar seus comandos javac e java com /usr/local/jdk1.7.0/. Para evitar esta digitação extra, acrescente esta informação à sua variável PATH. Os passos para fazer desta maneira variam dependendo de qual shell esteja usando. Se receber este erro, significa que esqueceu de incluir o sufixo .java ao compilar o programa; o comando é javac HelloWorldApp.java, e não javac HelloWorldApp. Erros de Sintaxe (Todas as Plataformas) Se digitar errado alguma parte do programa, o compilador pode emitir um erro de sintaxe. A mensagem geralmente mostra o tipo de erro, o número da linha de código onde o erro foi detetado, o código nesta linha, e a posição do erro dentro do código (˄). Aqui está um erro causado pela omissão de um ponto e vírgula, no final de uma declaração: Se surgirem quaisquer erros de compilação, seu programa não foi compilado com sucesso, e o compilador não criou um arquivo .class. Cuidadosamente verifique o programa, corrija quaisquer erros detectados e tente outra vez. Erros de Semântica Além de verificar que o seu programa esteja sintaticamente correto, o compilador verifica outras correções básicas. Por exemplo, o compilador alerta toda vez que for utilizada uma variável que não tenha sido inicializada: Book_The Java Tutorial_PFCG.indb 26 29/06/2015 15:15:33