Keywords Java é a sua historia
KEYWORDS JAVA É A SUA HISTORIA
A linguagem Java 1.0 consiste em palavras-chaves (Keywords) que definem a sintaxe da linguagem e um conjunto de APIs (Application Programming Interfaces) que fornecem classes e métodos pré-construídos para realizar tarefas comuns. Segue abaixo os principais Keywords e funcionalidades básicas disponível.
Palavras-Chave Fundamentais (Sintaxe da Linguagem)
Estas são as palavras reservadas que você usava para escrever seu código desde Java 1.0:
Tipos de Dados Primitivos:
- boolean: verdadeiro ou falso
 - byte: inteiro de 8 bits
 - char: caractere Unicode de 16 bits
 - short: inteiro de 16 bits
 - int: inteiro de 32 bits
 - long: inteiro de 64 bits
 - float: ponto flutuante de precisão simples (32 bits)
 - double: ponto flutuante de precisão dupla (64 bits)
 
Controle de Fluxo:
- if: condição "se"
 - else: condição "senão"
 - switch: múltiplos caminhos baseados em um valor
 - case: um caso dentro de um switch
 - default: caso padrão dentro de um switch
 - for: loop com inicialização, condição e incremento
 - while: loop que continua enquanto uma condição é verdadeira
 - do: loop que executa pelo menos uma vez
 - break: sai de um loop ou switch
 - continue: pula para a próxima iteração de um loop
 - return: retorna um valor de um método
 
Orientação a Objetos:
- class: declaração de uma classe
 - new: cria uma nova instância de um objeto
 - extends: indica herança de uma classe
 - implements: indica implementação de uma interface
 - interface: declaração de uma interface
 - this: referência ao objeto atual
 - super: referência à superclasse imediata
 - instanceof: verifica se um objeto é uma instância de um tipo
 
Modificadores de Acesso e Outros:
- public: acessível de qualquer lugar
 - private: acessível apenas dentro da própria classe
 - protected: acessível dentro da classe, subclasses e classes no mesmo pacote
 - static: membro que pertence à classe, não à instância
 - final: valor imutável, método não sobrescrevível, classe não herdável
 - abstract: classe ou método abstrato (não implementado)
 - void: indica que um método não retorna valor
 - package: declara o pacote de uma classe
 - import: importa classes ou pacotes
 - native: método implementado em código nativo (C/C++)
 - synchronized: para controle de concorrência (multithreading)
 - transient: campo não serializável
 - volatile: garante que um campo seja lido/escrito da memória principal
 
Tratamento de Exceções:
- try: bloco de código a ser monitorado para exceções
 - catch: bloco para capturar e tratar exceções
 - finally: bloco de código que sempre será executado
 - throw: lança uma exceção
 - throws: declara que um método pode lançar certas exceções
 
Novas Keywords adicionadas:
- strictfp: Introduzido no Java 1.2. Garante resultados de ponto flutuante estritos e portáveis
 - assert: Introduzido no Java 1.4. Usado para asserções no código para depuração
 - enum: Introduzido no Java 5. Para criar tipos enumerados de forma concisa
 - var: Introduzido no Java 10. Para inferência de tipo de variáveis locais (reduz boilerplate)
 - module: Introduzido no Java 9. Para o Sistema de Módulos de Plataforma Java (JPMS)
 - record: Introduzido no Java 16. Para declaração concisa de classes de dados imutáveis.
 - sealed: Introduzido no Java 17. Restringe quais outras classes ou interfaces podem estender ou implementar um tipo.
 
Observação: Embora todas permaneçam válidas e em uso até o Java 21, o uso direto de algumas (como synchronized em blocos grandes, ou native em códigos diários) pode ser menos comum devido à evolução de APIs de concorrência de alto nível ou mecanismos modernos de interoperabilidade.
Principais APIs (Pacotes e Classes Fundamentais)
Java 1.0 já vinha com uma biblioteca padrão rica, organizada em pacotes:
- java.lang: Continha as classes mais essenciais e automaticamente importadas. Todas continuam fundamentais e em uso até o Java 21
 
· Object: A classe raiz de toda a hierarquia de classes Java.
· String, StringBuffer: Para manipulação de texto.
· System: Para entrada/saída padrão (System.out.println()), acesso a propriedades do sistema.
· Thread, Runnable: Suporte básico para multithreading.
· Math: Funções matemáticas.
· Classes wrapper para tipos primitivos (ex: Integer, Double).
· Classes de exceção e erro (Exception, RuntimeException, Error).
- java.io: Para operações de Entrada/Saída. Continuam essenciais, entretanto novas APIs (como NIO.2 do Java 7) complementam, mas não substituem totalmente essas.
 
· Classes para leitura/escrita de arquivos (FileInputStream, FileOutputStream).
· Classes para leitura/escrita de caracteres (BufferedReader, PrintWriter).
- java.util: Classes de utilidade.
 
· Vector: (Depreciado/Legado no Java 1.2) Foi efetivamente substituído por ArrayList. Vector é sincronizado por padrão, o que é um overhead desnecessário na maioria dos casos. Para novas implementações, prefira ArrayList ou outras coleções do Collections Framework.
· ArrayList: (Java 1.2) Coleções básicas.
· Hashtable: (Depreciado/Legado no Java 1.2) Foi efetivamente substituído por HashMap. Hashtable é sincronizado e não permite chaves/valores null. Para novas implementações, prefira HashMap ou ConcurrentHashMap para concorrência.
· HashMap: (Java 1.2) Coleções básicas.
· Date: (Fortemente substituído/Legado no Java 1.1 e Java 8) A classe em si não está formalmente depreciada como uma classe, mas muitos de seus métodos foram depreciados já no Java 1.1 e substituídos por Calendar. A maior substituição veio com a nova API de Data e Hora (Java.time) introduzido no Java 8, que é imutável e muito mais robusta. Para código novo, sempre use Java.time.
· Calendar: Para manipulação de datas
· Random: Para geração de números aleatórios.
· StringTakenizer: (Depreciado no Java 9) Foi substituído por métodos mais flexíveis e poderosos com String.split e as classes do pacote Regex introduzido no Java 1.4.
- java.net: Para networking.
 
· Socket, ServerSocket: Para comunicação em rede.
· URL, URLConnection: Para interagir com URLs.
· http, HttpCliente: Introduzido no Java 11, Oferece uma forma mais moderna, assíncrona e flexível para clientes HTTP.
- java.applet: (Depreciado no Java 9 e removido no JDK no Java 11) A tecnologia de Applets se tornou obsoleta devido a problemas de segurança, desempenho e o surgimento de tecnologias web mais modernas (HTML5, JavaScript, etc).
 
· Applet: A classe base para todos os applets.
- java.awt (Abstract Window Toolkit): (Legado/Fortemente substituído no Java 11) Embora ainda exista como base para Swing, seu uso direto para construir GUIs complexas é desencorajado desde a introdução do Swing no Java 1.2. Muitos de seus componentes são considerados pesados e limitados. Embora não depreciado em sua totalidade, para novas GUIs, Swing ou JavaFX são as escolhas.
 
· Componentes básicos como Button, TextField, Frame, Panel.
· Gerenciadores de layout como FlowLayout, BorderLayout.
Principais Recursos e APIs adicionados
- Java 1.2 (J2SE 1.2):
 
· Collections Framework: (List, Set, Map, ArrayList, HashMap, etc.) - Substituiu Vector e Hashtable.
· Swing: Novo framework de GUI mais poderoso e "leve".
- Java 1.4:
 
· NIO (New I/O): java.nio para I/O orientado a buffer e canais.
· Expressões Regulares: java.util.regex.
- Java 5 (J2SE 5.0 - "Tiger"):
 
· Generics: Programação orientada a tipos genéricos para coleções e classes.
· Autoboxing/Unboxing: Conversão automática entre tipos primitivos e seus wrappers.
· Annotations: Metadados para código (ex: @Override, @Deprecated).
· Enhanced For-Loop: Sintaxe simplificada para iterar em coleções.
· Varargs: Argumentos de comprimento variável para métodos.
· java.util.concurrent: Pacote robusto para concorrência de alto nível.
- Java 7:
 
· Diamond Operator (<>): Inferência de tipo em generics.
· try-with-resources: Gerenciamento automático de recursos que implementam AutoCloseable.
· Strings em switch: Permite usar Strings como valores em switch cases.
· NIO.2: Extensões para o sistema de arquivos (manipulação de paths, etc.).
- Java 8:
 
· Expressões Lambda: Suporte para programação funcional.
· Stream API: Operações de pipeline em coleções para processamento de dados.
· Nova API de Data e Hora (java.time): Um sistema moderno e imutável para lidar com datas e horas, substituindo as classes java.util.Date e java.util.Calendar.
· Métodos Padrão em Interfaces: default keyword em interfaces.
- Java 9:
 
· Java Platform Module System (JPMS - Project Jigsaw): Modularização do JDK e de aplicações.
· JShell (REPL): Ferramenta interativa para executar snippets de código Java.
· HTTP/2 Client (incubating): Novo cliente HTTP (padronizado no Java 11).
- Java 10:
 
· var: Para inferência de tipo de variáveis locais.
- Java 11:
 
· HTTP/2 Client (standard): API cliente HTTP padrão.
· Removed Applets and Java Web Start.
- Java 14/16:
 
· Records (Standard no 16): Declaração concisa de classes de dados imutáveis.
· Pattern Matching for instanceof (Standard no 16): Simplifica o casting após uma verificação instanceof.
- Java 17 (LTS):
 
· Sealed Classes (Standard): Permite controlar quais classes podem estender ou implementar um tipo.
- Java 21 (LTS - Última versão no momento da escrita):
 
· Virtual Threads (Project Loom - Standard): Threads leves para concorrência massiva.
· Record Patterns (Standard): Desestruturação de objetos record em pattern matching.
· Sequenced Collections (Standard): Novas interfaces para coleções com ordem definida (SequencedCollection, SequencedSet, SequencedMap).
· String Templates (Preview): Nova sintaxe para interpolação de strings.
· Unnamed Classes and Instance Main Methods (Preview): Simplificações para programas pequenos.
Em resumo, a "primeira linguagem Java" forneceu um conjunto robusto de ferramentas e um paradigma de programação (Orientação a Objetos, WORA) que lançaram as bases para o vasto e poderoso ecossistema que conhecemos hoje. Ainda sim esta lista demonstra a evolução continua do Java, que se adapta às novas demandas da programação moderna, mantendo sua base robusta e seu compromisso com a compatibilidade retroativa.



