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.