30 Anos
Introdução
Java 30 Anos
Em 2025, a linguagem de programação Java completa 30 anos desde seu lançamento oficial. Criada originalmente pela Sun Microsystems, Java se tornou uma das linguagens mais influentes e utilizadas do mundo, marcando gerações de desenvolvedores e moldando o desenvolvimento de software moderno.

Origens do Java
- Início do Projeto (1991): O projeto Java começou como uma iniciativa da Sun Microsystems chamada Project Green. O objetivo era criar uma linguagem para dispositivos embarcados, como decodificadores de TV a cabo.
 - James Gosling: Considerado o "pai do Java", liderou a equipe que criou a linguagem.
 - Nome original: Oak (carvalho), inspirado em uma árvore próxima ao escritório de Gosling. Depois foi renomeado para Java, uma referência ao café da ilha de Java.
 
Lançamento Oficial
- 1995: A linguagem Java foi lançada oficialmente com o slogan:
"Write Once, Run Anywhere" (Escreva uma vez, execute em qualquer lugar)
 - Esse lema refletia a principal inovação do Java: a máquina virtual Java (JVM), que permite a execução do mesmo código em diferentes sistemas operacionais.
 
Evolução da Linguagem
Anos 1990
- 1996: Lançamento do JDK 1.0
 - Java começa a ganhar espaço com o crescimento da internet e os applets (pequenos aplicativos executados em navegadores).
 
Anos 2000
- 2004: Java 5 introduz recursos importantes como generics, annotations e o for-each loop.
 - Grande adoção no mercado corporativo com plataformas como Java EE (Enterprise Edition).
 
Anos 2010
- 2010: A Oracle adquire a Sun Microsystems e passa a ser a nova mantenedora do Java.
 - Java 8 (2014) traz expressões lambda e a API de streams, marcando uma grande modernização da linguagem.
 
Anos 2020
- Novo modelo de lançamentos: atualizações a cada 6 meses.
 - Java continua a evoluir com melhorias de performance, sintaxe mais moderna e novos recursos como records, pattern matching e virtual threads (Project Loom).
 
Impacto na Indústria
- Base de aplicações Android
 - Utilizado em sistemas bancários, servidores corporativos, jogos, ciência e mais
 - Forte presença acadêmica e em concursos de programação
 - Comunidade ativa e vasto ecossistema de bibliotecas e frameworks (Spring, Hibernate, etc.)
 
Curiosidade
- A primeira versão pública do Java foi lançada em 23 de maio de 1995.
 - A logo do Java — a xícara de café fumegante — é hoje um dos ícones mais reconhecidos no mundo da tecnologia.
 
Linha do Tempo: 30 Anos de Java
1991 ─────────────────────► Projeto Green é iniciado pela Sun Microsystems
                           (James Gosling começa o desenvolvimento do que viria a ser o Java)
1995 ─────────────────────► Lançamento oficial do Java 1.0
                           (Slogan: "Write Once, Run Anywhere")
1996 ─────────────────────► Lançamento do JDK 1.0
                           (Primeira versão estável para desenvolvedores)
1998 ─────────────────────► Java 2 (J2SE, J2EE, J2ME)
                           (Divisão em edições para diferentes tipos de aplicações)
2004 ─────────────────────► Java 5 (Tiger)
                           (Introdução de Generics, Annotations, Enum, Autoboxing, For-each loop)
2006 ─────────────────────► Java é disponibilizado como código aberto pela Sun (OpenJDK)
2010 ─────────────────────► Oracle adquire a Sun Microsystems
                           (Oracle passa a ser a nova responsável pelo Java)
2014 ─────────────────────► Java 8
                           (Expressões Lambda, Streams API, nova API de Data e Hora)
2017 ─────────────────────► Java 9
                           (Sistema de módulos - Project Jigsaw)
2019 ─────────────────────► Java 12-13
                           (Novo modelo de lançamentos semestrais)
2021 ─────────────────────► Java 17 (versão LTS)
                           (Pattern Matching, Sealed Classes, melhorias de performance)
2023 ─────────────────────► Java 21 (LTS)
                           (Virtual Threads - Project Loom, String Templates, Structured Concurrency)
2025 ─────────────────────► Java completa 30 anos!
O Método main
O método main é o ponto de entrada de qualquer aplicação Java. É a primeira coisa que a JVM (Java Virtual Machine) executa ao iniciar um programa.
Assinatura padrão
public static void main(String args)
Vamos entender cada parte dessa assinatura:
public: O método precisa ser público para que a JVM possa acessá-lo de fora da classe. static: É declarado como estático porque a JVM chama esse método sem criar uma instância da classe. void: O método não retorna nenhum valor. main: O nome obrigatório que a JVM reconhece como ponto de partida. String args: Um array de Strings que representa os argumentos de linha de comando passados ao programa. Exemplo básico
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Olá, mundo!");
    }
}
main é o coração do seu programa Java. Sem ele, a JVM não sabe onde começar.Anatomia
- Classe é como uma ficha médica/anatomia humana: define o que todas as pessoas têm (nome, peso, sexo, data de nascimento), mas não é uma pessoa real.
 - Objeto é como um corpo real: uma instância concreta de uma pessoa com características específicas.
 
Classe = Projeto ou molde Objeto = Instância concreta desse molde
Criando a Classe Pessoa em Java
Vamos representar uma pessoa com os seguintes atributos:
nome: Stringpeso: doublesexo: char (M ou F)dataNascimento: String (poderia serLocalDate, mas vamos simplificar para fins didáticos)
public class Pessoa {
    // Atributos (características da pessoa)
    String nome;
    double peso;
    char sexo;
    String dataNascimento;
    // Método para exibir informações
    void exibirInformacoes() {
        System.out.println("Nome: " + nome);
        
        System.out.println("Peso: " + peso + " kg");
        System.out.println("Sexo: " + sexo);
        System.out.println("Data de Nascimento: " + dataNascimento);
    }
}
Criando um Objeto do Tipo Pessoa
No método main, criamos uma pessoa real a partir da classe:
public class Main {
    public static void main(String[] args) {
        Pessoa p1 = new Pessoa(); // Criando o objeto (corpo)
        // Atribuindo valores (dados pessoais)
        p1.nome = "Ana Silva";
        p1.peso = 65.5;
        p1.sexo = 'F';
        p1.dataNascimento = "12/04/1998";
        // Exibindo as informações
        p1.exibirInformacoes();
    }
}
Visualização da analogia:
- Classe Pessoa → Molde / Projeto / Ficha Médica
 - Objeto p1 → Pessoa real (Ana Silva)
 
Atributos:
- nome → Nome do paciente
 - peso → Peso corporal
 - sexo → Sexo biológico
 - dataNascimento→ Data de nascimento
 
Resumidamente
Com essa analogia, entendemos que:
- Classe define o que um tipo de objeto deve ter.
 - Objeto é uma entidade concreta com dados reais.
 - Java permite criar quantos objetos quisermos a partir de uma mesma classe, assim como podemos ter muitas pessoas a partir da mesma estrutura anatômica.
Se quiser, posso complementar com uma ilustração visual (desenho anatômico x ficha x pessoa real), ou com outros exemplos como 
Carro,AnimalouLivro. Deseja isso também? 
Tipos de Dados
O que são tipos primitivos?
Em Java, tipos primitivos são os tipos de dados mais básicos. Eles não são objetos e são armazenados diretamente na memória.
Java possui 8 tipos primitivos:
| Tipo | Descrição | Exemplo | 
|---|---|---|
byte | Inteiro de 8 bits | 100 | 
short | Inteiro de 16 bits | 20000 | 
int | Inteiro de 32 bits | 150000 | 
long | Inteiro de 64 bits | 12345678900L | 
float | Ponto flutuante 32 bits | 3.14f | 
double | Ponto flutuante 64 bits | 3.1415926535 | 
char | Um caractere Unicode | 'A' | 
boolean | Verdadeiro ou falso | true / false | 
Por que usar tipos primitivos?
- Leves: Usam pouca memória.
 - Rápidos: São mais rápidos do que objetos.
 - Diretos: São ideais para cálculos simples e estruturas de controle.
 
Tipos Wrappers
Java oferece classes empacotadoras (wrapper classes) para cada tipo primitivo, que transformam tipos primitivos em objetos.
| Primitivo | Wrapper Class | 
|---|---|
int | Integer | 
double | Double | 
char | Character | 
boolean | Boolean | 
long | ??? | 
Exemplo:
int numero = 10;                     // tipo primitivo
Integer objNumero = Integer.valueOf(numero); // wrapper
System.out.println(objNumero + 5);  // Operação com objeto
Por que usar Wrappers?
- Permitem que valores primitivos sejam usados em:
 - Coleções (ArrayList, HashMap, etc.)
 - APIs modernas
 - Incluem métodos úteis:
 - Integer.parseInt("123")
 - Double.isNaN(x)
 - Character.isLetter('A')
 
Autoboxing e Unboxing
Desde o Java 5, o compilador faz conversões automáticas entre tipos primitivos e wrappers:
Integer a = 5;       // Autoboxing (int → Integer)
int b = a;           // Unboxing (Integer → int)
Universo de Classes
Além das wrappers, Java oferece classes auxiliares para trabalhar com tipos:
String: Manipulação de texto (não é wrapper, mas frequentemente usada com char) Math: Funções matemáticas (Math.pow(), Math.sqrt(), etc.) BigInteger e BigDecimal: Para números grandes e cálculos de alta precisão
Sabia que?
- Tipos primitivos são rápidos e eficientes para cálculos simples.
 - Wrappers são essenciais para usar primitivas em estruturas que exigem objetos.
 - Com o uso de autoboxing, Java torna mais simples alternar entre esses dois mundos.
 
Tipagem correta
Ao modelar uma classe como Pessoa, é essencial escolher os tipos de dados apropriados para garantir:
- Eficiência de memória
 - Clareza do código
 - Correta representação dos dados
 
1. nome → String
- Representa uma sequência de caracteres.
 - Exemplo: 
"João da Silva" - Justificativa: nomes são textos, e 
Stringé ideal para armazenar dados textuais em Java. 
2. peso → double
- Representa valores com casas decimais.
 - Exemplo: 
72.5 - Justificativa: o peso pode ter frações (ex: 72,5 kg), e 
doubletem precisão suficiente para esse caso. 
3. sexo → char ou String
- Exemplo: 
'M','F'ou"Masculino","Feminino" - Melhor escolha: 
charse forem apenas códigos ('M'/'F');Stringse quiser mais flexibilidade. - Alternativa moderna: usar um 
enum Sexo { MASCULINO, FEMININO, OUTRO } 
4. dataNascimento → LocalDate
- Representa uma data (sem hora).
 - Exemplo: 
LocalDate.of(1995, 5, 27) - Justificativa: usar a API moderna de datas (
java.time) permite validação, cálculo de idade, formatação etc. 
Classe Pessoa
import java.time.LocalDate;
public class Pessoa {
    String nome;
    double peso;
    char sexo;
    LocalDate dataNascimento;
    void exibirInformacoes() {
        System.out.println("Nome: " + nome);
        System.out.println("Peso: " + peso + " kg");
        System.out.println("Sexo: " + sexo);
        System.out.println("Data de Nascimento: " + dataNascimento);
    }
}
Falta pouco
public enum Sexo {
    MASCULINO, FEMININO, OUTRO
}
import java.time.LocalDate;
public class Pessoa {
    String nome;
    double peso;
    Sexo sexo;
    LocalDate dataNascimento;
}
Vantagem do uso de enum:
Evita valores inválidos como "m", "x", "masculina" etc. Mais seguro e semântico.
| Atributo | Tipo Ideal | Observação | 
|---|---|---|
| nome | String | Texto | 
| peso | double | Casas decimais | 
| sexo | char ou enum | char para 'M'/'F'; enum para mais opções | 
| dataNascimento | LocalDate | API moderna, facilita cálculos de idade | 
Conclusão
Java é uma linguagem que conseguiu se manter relevante por três décadas graças à sua filosofia de portabilidade, robustez e à constante evolução. Com uma vasta comunidade e um ecossistema maduro, o Java segue como uma das principais linguagens do mundo — pronta para continuar sua história nas próximas décadas.