Este repositório é o meu portfólio de evolução na linguagem Java, documentando minha jornada prática e teórica através da plataforma Alura. Abaixo está o mapeamento dos conceitos estudados e aplicados nos códigos do projeto.
- Tipos Primitivos: Declaração e uso de números inteiros (
int), números com casas decimais (double) e valores lógicos (boolean). - Tipos de Referência: Introdução ao uso de
Stringpara armazenamento e exibição de textos. - Entrada de Dados: Configuração e leitura do teclado via terminal utilizando a classe
Scannercom os métodosnextInt(),nextDouble()enextLine(). - Boas Práticas: Gerenciamento de recursos com o encerramento de conexões de leitura (
scanner.close()).
- Fluxo de Decisão: Criação de caminhos lógicos no código utilizando estruturas simples (
if / else) e encadeadas (else if). - Operadores Lógicos: Uso dos operadores
&&(E) e||(OU) para validar múltiplas regras de negócio na mesma condição (ex: validação de triângulos e dias úteis). - Comparação de Textos: Utilização do método
.equals()no lugar de==para comparar o conteúdo real de variáveisString. - Refatoração com Booleanos: Armazenamento de verificações lógicas dentro de variáveis
booleanantes do blocoifpara tornar o código mais limpo e profissional.
- Laço
forTradicional: Estruturação de repetições com número de voltas conhecido (iniciação, condição e incremento), aplicado em contadores e cálculos de fatorial. - Laço
for-each: Leitura simplificada para percorrer todos os itens de umArrayou coleção de dados automaticamente, sem uso de índices de posição. - Laços
whileedo-while: Repetições condicionais ideais para menus interativos, loops infinitos controlados (while(true)) e validação de digitação do usuário. - Comandos de Salto: Domínio do
breakpara interromper e sair de um laço na hora, e docontinuepara pular uma rodada específica do loop. - Controle de Buffer: Solução para o "Enter Fantasma" (
\n) que sobra na memória doScannerao misturar leituras de números e textos. - Coleções Dinâmicas: Introdução à manipulação de listas que crescem e diminuem de tamanho com
ArrayList.
- Manipulação Básica de Textos: Uso de métodos como
.length()(tamanho do texto),.trim()(remoção de espaços extras) e.equalsIgnoreCase()(comparação ignorando maiúsculas/minúsculas). - Fatiamento de Textos: Uso do comando
.split(" ")para separar uma frase inteira em uma lista de palavras independentes. - Expressões Regulares (Regex): Aplicação das classes
PatterneMatcherpara busca, substituição e validação avançada de formatos (ex: CPF, códigos de referência, hashtags e regras de senha forte).
- API Moderna do Java (
java.time): Captura e manipulação de datas e horários do sistema utilizando as classesLocalDateeLocalTime. - Formatação Visual: Criação de moldes personalizados (como padrão brasileiro
dd-MM-yyyye horáriosHH:mm) utilizando oDateTimeFormattere o método.format(). - Cálculos e Intervalos: Medição precisa de duração entre dois horários com
Duration.between()e manipulação de prazos somando ou subtraindo períodos com.plusDays(),.plusMonths()e.minusDays(). - Comparação Temporal: Uso de métodos relacionais como
.isBefore()e.isAfter()para verificar se eventos já ocorreram na linha do tempo. - Fusos Horários (Timezones): Trabalho com horários regionais e conversões internacionais mantendo o mesmo instante temporal através de
ZonedDateTimeeZoneId(ex: Tóquio e Sydney). - Conversão de Textos (
parse): Transformação deStringsdigitadas pelo usuário em objetos de tempo reais através doLocalTime.parse(), integrado a um sistema completo de cálculo de saldo de horas e horas extras.
- Estruturas de Dados (
List,Set,Map): Utilização deArrayListpara listas ordenadas,HashSetpara remoção automática de elementos duplicados, eHashMappara estruturação de dicionários chave-valor com checagem de segurança (containsKey). - Stream API: Processamento funcional de coleções utilizando expressões lambda.
- Filtros e Transformações: Aplicação de
.filter()para seleção condicional de dados e.map()para transformação de elementos em lote. - Reduções e Operações Estatísticas: Consolidação de valores com
.reduce()(como somas e impostos), além de cálculos de médias, valores máximos e mínimos com tratamento preventivo de listas vazias.
- Ocultação de Dados: Proteção de atributos internos utilizando o modificador
privatepara impedir alterações indevidas vindas de fora da classe. - Validação de Regras de Negócio: Implementação de barreiras lógicas dentro dos métodos
setters(ex: bloqueio de preços negativos, saques maiores que o saldo e notas escolares inválidas). - Métodos Auxiliares Privados: Isolamento de regras complexas de cálculo e alteração de estado (como atualização automática de níveis e pontuações de usuários) dentro da própria classe.
- Imutabilidade e Segurança: Uso do modificador
finale validações de credenciais para garantir a integridade dos dados (como o fluxo de alteração e validação de senhas).
- Herança (
extends): Reutilização eficiente de código entre superclasses e subclasses, herdando atributos e métodos comuns (como dados de pessoas e mídias). - Reaproveitamento com
super(): Chamada de construtores e métodos da classe mãe para inicializar dados estruturados de forma limpa. - Modificador
protected: Controle de acesso estratégico para permitir que classes filhas utilizem atributos da superclasse sem expô-los publicamente. - Polimorfismo: Sobrescrita de métodos (
@Override) permitindo que diferentes classes (comoEmail,SmsePush) implementem o mesmo comportamento de formas específicas, respondendo a chamadas genéricas. - Interfaces e Contratos (
implements): Definição de padrões rígidos de comportamento (como emControlavel) para padronizar ações em dispositivos e componentes distintos.
Trilha em constante expansão conforme o avanço nos módulos do curso.