ConteúdoAnnotations e Reflection API
O que são annotations, como criá-las e usá-las
Como instanciar objetos e invocar métodos via reflexão
Generics
Comparação entre o uso e não uso do generics
Uso do generics em classes e métodos
Generics e as subclasses
Wildcars
Inner Classes
Características de uma inner class
Os 4 tipos de inner classes existentes
Programação Concorrente com java.util.concurrent
Criando e executando threads com as interfaces Runnable e Callable
Comunicação e sincronização com conditions e locks
Tarefas futuras
Operações atômicas
Programação em Rede com Sockets TCP/IP e UDP/IP
Sockets TCP/IP e UDP/IP
Multicast
Programação Distribuída com RMI
RMI Registry
Stubs e Skeletons
Invocação de objetos remotos
Implementação de um cliente
Tópicos Avançados de I/O
Argumentos de linha de comando
A classe Properties
Serialização de objetos
Acesso aleatório a arquivos
Acessando Bancos de Dados Através de JDBC
Arquitura do JDBC
Uso de conexões, statements e results sets
Metadados
Transações
Atualizações em lote
Desenvolvendo Aplicações Gráficas com Swing
Containers, components e layout managers
Menus
Tratamento de eventos
Manipulação de Dados nos Formatos XML e JSON
Manipulação de documentos com as APIs DOM e SAX
Validação com XML Schema
Manipulação de dados no formato JSON
Log em Aplicações usando Log4j
Configuração da API
Loggers, log levels, appenders e layouts
Criando Testes de Unidade com o JUnit
Implementação de métodos para testes de unidade
Execução e verificação dos resultados dos testes
Test suites
Automatizando Tarefas com o Ant
O Ant como automatizador de tarefas
Build file
Project, target, task e properties
Manipulação de Dados com a New I/O API
Channels e Buffers
Memory-Mapped Files
I/O assíncrono
Mão na Massa: Criando Aplicações na Prática
Implementação de aplicações completas