Esta apostila da Caelum visa ensinar de uma maneira elegante, mostrando apenas o que é necessário e quando é necessário, no momento certo, poupando o leitor de assuntos que não costumam ser de seu interesse em determinadas fases do aprendizado. A Caelum espera que você aproveite esse material. Todos os comentários, críticas e sugestões serão muito bem-vindos. Essa apostila é constantemente atualizada e disponibilizada no site da Caelum. Sempre consulte o site para novas versões e, ao invés de anexar o PDF para enviar a um amigo, indique o site para que ele possa sempre baixar as últimas versões. Você pode conferir o código de versão da apostila logo no nal do índice. Baixe sempre a versão mais nova em: www.caelum.com.br/apostilas Esse material é parte integrante do treinamento Java e Orientação a Objetos e distribuído gratuitamente exclusivamente pelo site da Caelum. Todos os direitos são reservados à Caelum. A distribuição, cópia, revenda e utilização para ministrar treinamentos são absolutamente vedadas. Para uso comercial deste material, por favor, consulte a Caelum previamente. SOBRE ESTA APOSTILA 1 4 19 Sumário 1 Como Aprender Java 1.1 O que é realmente importante? 1 1.2 Sobre os exercícios 2 1.3 Tirando dúvidas e indo além 2 2 O que é Java 2.1 Java 4 2.2 Uma breve história do Java 5 2.3 Máquina Virtual 6 2.4 Java lento? Hotspot e JIT 8 2.5 Versões do Java e a confusão do Java2 9 2.6 JVM? JRE? JDK? O que devo baixar? 9 2.7 Onde usar, e os objetivos do Java 10 2.8 Especificação versus implementação 11 2.9 Como o FJ-11 está organizado 11 2.10 Compilando o primeiro programa 12 2.11 Executando seu primeiro programa 14 2.12 O que aconteceu? 14 2.13 Para saber mais: como é o bytecode? 15 2.14 Exercícios: modificando o Hello World 16 2.15 O que pode dar errado? 16 2.16 Um pouco mais... 17 2.17 Exercícios opcionais 18 3 Variáveis Primitivas e Controle de Fluxo 3.1 Declarando e usando variáveis 19 3.2 Tipos primitivos e valores 22 3.3 Exercícios: Variáveis e tipos primitivos 22 3.4 Discussão em aula: convenções de código e código legível 23 3.5 Casting e promoção 23 SumárioCaelum 35 59 75 3.6 O if e o else 26 3.7 O While 28 3.8 O For 28 3.9 Controlando loops 29 3.10 Escopo das variáveis 30 3.11 Um bloco dentro do outro 32 3.12 Para saber mais 32 3.13 Exercícios: fixação de sintaxe 32 3.14 Desafios: Fibonacci 34 4 Orientação a Objetos Básica 4.1 Motivação: problemas do paradigma procedural 35 4.2 Criando um tipo 37 4.3 Uma classe em Java 39 4.4 Criando e usando um objeto 39 4.5 Métodos 41 4.6 Métodos com retorno 42 4.7 Objetos são acessados por referências 44 4.8 O método transfere() 47 4.9 Continuando com atributos 49 4.10 Para saber mais: uma fábrica de carros 51 4.11 Um pouco mais... 53 4.12 Exercícios: Orientação a Objetos 53 4.13 Desafios 56 4.14 Fixando o conhecimento 57 5 Modificadores de Acesso e Atributos de Classe 5.1 Controlando o acesso 59 5.2 Encapsulamento 62 5.3 Getters e setters 64 5.4 Construtores 67 5.5 A necessidade de um construtor 68 5.6 Atributos de classe 70 5.7 Um pouco mais... 72 5.8 Exercícios: encapsulamento, construtores e static 72 5.9 Desafios 73 6 Eclipse IDE 6.1 O Eclipse 75 CaelumSumário 91 100 121 136 6.2 Apresentando o Eclipse 76 6.3 Views e Perspective 77 6.4 Criando um projeto novo 79 6.5 Criando o main 83 6.6 Executando o main 85 6.7 Pequenos truques 86 6.8 Exercícios: Eclipse 87 6.9 Discussão em aula: Refactoring 90 7 Pacotes - Organizando suas Classes e Bibliotecas 7.1 Organização 91 7.2 Diretórios 92 7.3 Import 93 7.4 Acesso aos atributos, construtores e métodos 95 7.5 Usando o Eclipse com pacotes 96 7.6 Exercícios: pacotes 98 8 Ferramentas: JAR e Javadoc 8.1 Arquivos, bibliotecas e versões 100 8.2 Gerando o JAR pelo Eclipse 102 8.3 Javadoc 104 8.4 Gerando o Javadoc 105 8.5 Exercícios: JAR e Javadoc 108 8.6 Importando um JAR externo 109 8.7 Exercícios: Importando um JAR 109 8.8 Manipulando a conta pela interface gráfica 111 8.9 Exercícios: mostrando os dados da conta na tela 118 9 Herança, Reescrita e Polimorfismo 9.1 Repetindo código? 121 9.2 Reescrita de método 125 9.3 Invocando o método reescrito 126 9.4 Polimorfismo 127 9.5 Um outro exemplo 129 9.6 Um pouco mais... 131 9.7 Exercícios: herança e polimorfismo 131 9.8 Discussões em aula: alternativas ao atributo protected 135 10 Classes Abstratas 10.1 Repetindo mais código? 136 SumárioCaelum 145 160 179 10.2 Classe abstrata 137 10.3 Métodos abstratos 139 10.4 Aumentando o exemplo 140 10.5 Para saber mais... 143 10.6 Exercícios: classes abstratas 143 11 Interfaces 11.1 Aumentando nosso exemplo 145 11.2 Interfaces 149 11.3 Dificuldade no aprendizado de interfaces 153 11.4 Exemplo interessante: conexões com o banco de dados 154 11.5 Exercícios: interfaces 155 11.6 Exercícios opcionais 158 11.7 Discussão: favoreça composição em relação à herança 159 12 Exceções e Controle de Erros 12.1 Motivação 160 12.2 Exercício para começar com os conceitos 162 12.3 Exceções de Runtime mais comuns 166 12.4 Outro tipo de exceção: Checked Exceptions 167 12.5 Um pouco da grande família Throwable 170 12.6 Mais de um erro 171 12.7 Lançando exceções 171 12.8 O que colocar dentro do try? 173 12.9 Criando seu próprio tipo de exceção 174 12.10 Para saber mais: finally 175 12.11 Exercícios: exceções 176 12.12 Desafios 177 12.13 Discussão em aula: catch e throws com Exception 177 13 O Pacote java.lang 13.1 Pacote java.lang 179 13.2 Um pouco sobre a classe System 179 13.3 java.lang.Object 180 13.4 Métodos do java.lang.Object: equals e toString 181 13.5 Exercícios: java.lang.Object 185 13.6 java.lang.String 186 13.7 Exercícios: java.lang.String 189 13.8 Desafio 191 CaelumSumário 192 202 232 235 13.9 Discussão em aula: o que você precisa fazer em Java? 191 14 Um Pouco de Arrays 14.1 O problema 192 14.2 Arrays de referências 193 14.3 Percorrendo uma array 194 14.4 Percorrendo uma array no Java 5.0 195 14.5 Exercícios: arrays 196 14.6 Um pouco mais... 199 14.7 Desafios opcionais 201 15 Collections Framework 15.1 Arrays são trabalhosas, utilizar estrutura de dados 202 15.2 Listas: java.util.List 203 15.3 Listas no Java 5 e Java 7 com Generics 207 15.4 A importância das interfaces nas coleções 208 15.5 Ordenação: Collections.sort 209 15.6 Exercícios: ordenação 212 15.7 Conjunto: java.util.Set 214 15.8 Principais interfaces: java.util.Collection 216 15.9 Percorrendo coleções no Java 5 217 15.10 Para saber mais: iterando sobre coleções com java.util.Iterator 218 15.11 Mapas - java.util.Map 220 15.12 Para saber mais: Properties 222 15.13 Para saber mais: Equals e HashCode 223 15.14 Para saber mais: boas práticas 224 15.15 Exercícios: Collections 224 15.16 Desafios 228 15.17 Para saber mais: Comparators, classes anônimas, Java 8 e o lambda 229 16 E Agora? 16.1 Web 232 16.2 Praticando Java e usando bibliotecas 232 16.3 Grupos de usuários 233 16.4 Próximos cursos 233 17 Pacote java.io 17.1 Conhecendo uma API 235 17.2 Orientação a objetos no java.io 236 17.3 InputStream, InputStreamReader e BufferedReader 236 SumárioCaelum 250 259 273 280 17.4 Lendo Strings do teclado 239 17.5 A analogia para a escrita: OutputStream 240 17.6 Uma maneira mais fácil: Scanner e PrintStream 241 17.7 Um pouco mais... 242 17.8 Integer e classes wrappers (box) 243 17.9 Autoboxing no Java 5.0 244 17.10 Para saber mais: java.lang.Math 244 17.11 Exercícios: Java I/O 245 17.12 Discussão em aula: Design Patterns e o Template Method 247 18 Apêndice - Programação Concorrente e Threads 18.1 Threads 250 18.2 Escalonador e trocas de contexto 253 18.3 Garbage Collector 254 18.4 Exercícios 256 18.5 E as classes anônimas? 257 19 Apêndice - Sockets 19.1 Motivação: uma API que usa os conceitos aprendidos 259 19.2 Protocolo 259 19.3 Porta 260 19.4 Socket 261 19.5 Servidor 262 19.6 Cliente 263 19.7 Imagem geral 265 19.8 Exercícios: Sockets