1. Introdução

2. Escrever programas
2.1. Linguagens de programação
2.2. Programas Java
2.3. Exemplos usados neste livro
2.4. Erros
2.5. O que vai precisar

3. Representação e manipulação de dados
3.1. Expressões
3.2. Literais. Memória. Variáveis. Instrução de atribuição
3.3. Tipos de dados primitivos e (um cheirinho de) String
3.4. Revisitando variáveis. Instrução de atribuição
3.5. Ainda as expressões
3.6. Comentários, indentação e outros promotores de legibilidade

4. Abstração procedimental
4.1. Alguns métodos já nossos conhecidos
4.2. Procedimentos
4.3. Funções
4.4. Memória e âmbito das variáveis
4.5. Documentação
4.6. Repositórios de métodos úteis

5. O tipo de dados boolean e comandos condicionais
5.1. O tipo primitivo boolean
5.2. Execução condicional
5.3. Ainda a documentação
5.4. Comparação de valores numéricos reais

6. Ciclos
6.1. Atalhos para operações comuns
6.2. A instrução for
6.3. Ciclos for encaixados
6.4. Ainda a abstração procedimental
6.5. Ainda o âmbito das variáveis
6.6. A instrução while
6.7. A instrução do-while

7. Abstração de dados
7.1. Tipos de dados não primitivos
7.2. Revisitando o tipo String

8. Algumas classes da biblioteca Java
8.1. Pacotes
8.2. Geração de valores aleatórios
8.3. Construindo uma String passo a passo
8.4. A classe StringBuilder
8.5. Input e output em Java
8.6. Aliasing
8.7. null
8.8. Garbage collection
8.9. Ficheiros de texto
8.10. Exceções

9. Arrays
9.1. O tipo de dados não primitivo array
9.2. Acesso aos elementos de um array
9.3. Número de elementos de um array
9.4. Copiar arrays
9.5. Funções cujo resultado é um array
9.6. Métodos com parâmetros do tipo array
9.7. Arrays multi-dimensionais

10. Criar novos tipos de dados
10.1. O tipo de dados Jogador
10.2. Atributos de instância
10.3. Construtores
10.4. Métodos que revelam o estado
10.5. Métodos que alteram o estado
10.6. Mais construtores
10.7. Imprimir, duplicar e comparar objetos - como NÃO fazer
10.8. Agora sim - Imprimir, duplicar e comparar objetos
10.9. A classe Jogador completa

11. Um novo tipo de dados, cliente de Jogador
11.1. A classe Jogo
11.2.Registar jogadores no jogo
11.3. Registar pontuação - 1ª versão
11.4. Outros métodos
11.5. Atributos e métodos de classe (static)
11.6. O método toString na classe Jogo
11.7. Fim de jogo, vencedores, etc
11.8. A classe Jogo completa
11.9. Representação em UML

12.Tipos enumerados

13. Interfaces
13.1. Definição e implementação
13.2. Representação em UML
13.3. Subtipos
13.4. O interface Ganhavel
13.5. O interface genérico List

14. Herança
14.1. Uma subclasse de Jogo
14.2. A relação subclasse/superclasse
14.3. Subtipos
14.4. Herança e construtores
14.5. Invocação de métodos herdados
14.6. Redefinição de métodos
14.7. Outra subclasse de Jogo
14.8. Ainda a redefinição de métodos
14.9. Redefinição versus atributos

15. Polimorfismo e ligação dinâmica
15.1. Polimorfismo
15.2. Verificação estática de tipos
15.3. Ligação dinâmica
15.4. Invocação indireta de métodos redefinidos
15.5. Herança de contratos versus redefinição
15.6. Tipos genéricos e subtipos
15.7. Métodos genéricos

16. Classes abstratas
16.1. A classe abstrata Jogo
16.2. Métodos template