Programa do Curso
Introdução à Java
- História e evolução de Java
- Visão geral das versões e actualizações do Java
- O que há de novo no Java 17
- Configuração do Java Development Kit (JDK 17) e do IDE
Estrutura do programa Java
- Escrevendo um programa Java simples
- Visão geral da sintaxe Java
- Compilação e execução de Java aplicações
Tipos de dados e variáveis
- Tipos de dados primitivos e classes de invólucro
- Declarar variáveis e constantes
- Conversão de tipos e casting
Operadores em Java
- Operadores aritméticos, relacionais, lógicos e bit a bit
- Precedência e associatividade de operadores
Declarações de fluxo de controlo
- Declarações condicionais (if-else, switch)
- Construções de looping (for, while, do-while)
- Expressões switch melhoradas (Java 17 funcionalidades)
Introdução aos conceitos de OOP
- Classes e objectos
- Encapsulamento, herança, polimorfismo e abstração
Criação de classes e objectos
- Declarando e inicializando objetos
- A palavra-chave this
- Construtores (padrão e parametrizados)
Herança
- Extensão de classes (palavra-chave extends)
- Sobreposição de métodos e a palavra-chave super
- Classes e métodos abstractos
Polimorfismo
- Polimorfismo em tempo de compilação vs. polimorfismo em tempo de execução
- Sobrecarga e sobreposição de métodos
Interfaces
- Definição e implementação de interfaces
- Interfaces funcionais e métodos por defeito
Classes de registo (Java 17 feature)
- Compreender os registos em Java 17
- Como os registos simplificam o encapsulamento de dados
Genéricos em Java
- Compreender os parâmetros de tipo
- Classes, métodos e interfaces genéricos
- Tipos limitados e curingas
Tratamento de excepções
- Tipos de excepções (verificadas e não verificadas)
- Blocos try-catch-finally
- Lançamento e captura de excepções
- Criação de excepções personalizadas
Java Estrutura de colecções
- Interfaces List, Set, Map e Queue
- Implementações populares: ArrayList, HashMap, HashSet
- Iteradores e loops for melhorados
Expressões lambda Express e funcionais Programming
- Introdução às expressões lambda
- Sintaxe e utilização
- Interfaces funcionais
API de fluxo
- Descrição geral de Java Fluxos
- Operações de fluxo (filtragem, mapeamento, redução)
- Fluxos paralelos e considerações de desempenho
Classes seladas
- Definição e utilização de classes seladas
- Subclasses permitidas e restrições
Correspondência de padrões para instanceof (Java 17 feature)
- Simplificando verificações de tipo com pattern matching
Blocos de texto
- Trabalhar com blocos de texto com várias linhas em Java
- Comparação com o tratamento tradicional de strings
Registos e melhorias na serialização
- Serialização e compatibilidade com versões anteriores
- Como os registos melhoram a legibilidade e a manutenção do código
Depreciação e remoção de recursos
- APIs obsoletas em Java 17
- Remoção de funcionalidades desactualizadas
Melhorias no switch Express ião
- Correspondência de padrões em switch
- Uso de expressões switch para um código mais limpo
Função estrangeira e API de memória (Incubadora)
- Visão geral do módulo incubadora
- Trabalhando com código nativo em Java
Java Sistema de módulos (Projeto Jigsaw)
- Introdução aos módulos em Java
- Criando e usando módulos
- Descritores de módulo e module-info.java
- Vantagens da modularização
Concorrência e Multithreading
- Introdução a threads e multithreading
- Interface executável e interface chamável
- Sincronização, bloqueios e segurança de thread
Assíncrono Programming com CompetableFuture
- Escrevendo código assíncrono
- Usando CompetableFuture para operações sem bloqueio
Implementando Java Aplicações
- Criando e executando arquivos JAR
- Empacotando e distribuindo aplicações Java
- Introdução ao GraalVM (opcional)
Melhores práticas e otimização de código
- Escrevendo código Java eficiente e de fácil manutenção
- Armadilhas comuns de desempenho e como evitá-las
- Técnicas de refatoração de código
Resumo e próximos passos
Requisitos
- Conhecimentos básicos de programação
Público
- Programadores de software
- Programadores