Introdução
Java é uma linguagem de programação orientada a objetos, multiplataforma e de alto nível, criada pela Sun Microsystems em 1995 (atualmente mantida pela Oracle). É amplamente usada em aplicações empresariais, mobile (Android), web, IoT e big data. Sua filosofia “write once, run anywhere” (escreva uma vez, execute em qualquer lugar) é garantida pela JVM (Máquina Virtual Java).
Conceitos Fundamentais
1. JDK (Java Development Kit)
É o kit de desenvolvimento completo para Java. Inclui:
JRE (Java Runtime Environment): Ambiente de execução para programas Java.
Compilador (
javac): Traduz código-fonte (.java) para bytecode (.class).Bibliotecas padrão: Coleção de classes (e.g.,
java.util,java.io).Ferramentas extras:
jar(empacotamento),javadoc(documentação), debugger.
Use o JDK para desenvolver programas Java.
2. JVM (Java Virtual Machine)
É a “máquina virtual” que executa o bytecode Java. Traduz o bytecode para instruções nativas do sistema operacional. Responsável por:
Gerenciamento de memória (coleta de lixo).
Portabilidade (o mesmo bytecode roda em Windows, Linux, macOS).
Segurança e otimização em tempo de execução (JIT Compiler).
3. JRE (Java Runtime Environment)
Contém apenas os componentes necessários para executar aplicações Java (JVM + bibliotecas básicas). Não inclui ferramentas de desenvolvimento.
Relacionamento:
JDK = JRE + Ferramentas de DesenvolvimentoJRE = JVM + Bibliotecas Padrão
Sintaxe Básica com Exemplos
Todo programa Java é composto por classes, métodos e pacotes. O ponto de entrada é sempre o método public static void main(String[] args). Exemplo mínimo:
public class OlaMundo {
public static void main(String[] args) {
System.out.println("Olá, Mundo!");
}
}
Esse código mostra como declarar uma classe e imprimir texto no console.
Tipos primitivos e variáveis
Java oferece oito tipos primitivos: byte, short, int, long, float, double, char e boolean. Eles armazenam valores simples e têm tamanhos fixos, garantindo portabilidade. Variáveis são declaradas com o tipo seguido de nome, por exemplo: int idade = 30;. Além dos primitivos, há tipos de referência como String e objetos de classes.
Operadores e expressões
Java suporta operadores aritméticos (+, -, *, /, %), relacionais (==, !=, >, <) e lógicos (&&, ||, !). Expressões combinam variáveis, literais e operadores, produzindo valores avaliados em tempo de execução. O operador instanceof verifica se um objeto é instância de determinada classe. O uso correto de parênteses garante precedência e legibilidade.
Estruturas de controle
Estruturas condicionais usam if, else if, else e switch para ramificar o fluxo. Laços de repetição são feitos com for, while e do-while. O for-each (for (Tipo item : colecao)) simplifica iterações em arrays e coleções. Instruções break e continue ajustam o fluxo dentro de loops.
Programação Orientada a Objetos
Classes e objetos
Classes definem tipos de dados personalizados, como:
public class Pessoa {
String nome;
int idade;
public Pessoa(String nome, int idade) {
this.nome = nome;
this.idade = idade;
}
public void apresentar() {
System.out.println("Meu nome é " + nome);
}
}
Objetos são instâncias de classes, criados com new Pessoa("Ana", 25).
Encapsulamento
Encapsulamento esconde detalhes internos, expondo apenas métodos públicos (get/set). Isso garante controle de acesso e manutenção futura sem quebrar clientes do código.
Herança
Herança permite a criação de hierarquias de classes. Exemplo:
public class Estudante extends Pessoa {
String matricula;
public Estudante(String nome, int idade, String matricula) {
super(nome, idade);
this.matricula = matricula;
}
}
Polimorfismo
Polimorfismo dá a capacidade de usar um objeto de várias formas através de métodos sobrescritos ou interfaces.
Abstração
Abstração foca no que um objeto faz, não em como faz. Classes abstratas e interfaces definem contratos que implementações concretas devem seguir.
Tratamento de Exceções
Java utiliza try, catch, finally e throw para tratar condições excepcionais. Exceções verificadas (IOException) devem ser declaradas ou tratadas, enquanto não verificadas (RuntimeException) são opcionais. Exemplo:
try {
int divisao = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("Erro de divisão: " + e.getMessage());
} finally {
System.out.println("Bloco finally executado sempre");
}
Coleções e Generics
O pacote java.util traz interfaces (List, Set, Map) e implementações (ArrayList, HashSet, HashMap).
| Interface | Implementação | Característica |
|---|---|---|
| List | ArrayList, LinkedList | Ordenação e elementos duplicados |
| Set | HashSet, TreeSet | Sem duplicação |
| Map | HashMap, TreeMap | Chave-valor |
Generics (List<String>) oferecem segurança de tipos em tempo de compilação.
Expressões Lambda e Streams (Java 8+)
Lambdas permitem funções anônimas com sintaxe concisa:
List<Integer> nums = Arrays.asList(1, 2, 3, 4);
nums.stream()
.filter(n -> n % 2 == 0)
.forEach(System.out::println);
Streams facilitam operações funcionais como map, filter e reduce, encadeando transformações.
Concorrência e Threads
Java suporta threads nativas (java.lang.Thread) e mecanismos avançados (ExecutorService). Exemplo de Runnable:
Runnable tarefa = () -> {
System.out.println("Executando em thread: " + Thread.currentThread().getName());
};
new Thread(tarefa).start();
Pacotes java.util.concurrent trazem estruturas escaláveis como ConcurrentHashMap e CountDownLatch.
Ferramentas e Ecossistema
Maven e Gradle: gerenciamento de dependências e build.
JUnit: testes unitários.
Spring: framework para aplicações web e microserviços.
Hibernate: mapeamento objeto-relacional.
IDE: IntelliJ IDEA, Eclipse e VS Code são escolhas populares para Java.
Links para Download
JDK (Oracle):
Oracle JDK 21
(Recomendado para produção)OpenJDK (Gratuito):
Adoptium JDK
Amazon CorrettoAmbientes de Desenvolvimento (IDEs):
Por Que Java?
Robustez: Checagem de erros em tempo de compilação e execução.
Ecosistema: Frameworks como Spring (web), Hibernate (banco de dados), Android SDK.
Performance: JVM otimiza código dinamicamente (JIT Compiler).
Comunidade: Uma das maiores do mundo, com vasta documentação e bibliotecas.
Como Compilar e Executar (via Terminal)
Salve o código em
HelloWorld.java.Compile:
bashjavac HelloWorld.java # Gera HelloWorld.classExecute:
bashjava HelloWorld # Saída: "Olá, Mundo!"
Conclusão
Java continua dominando aplicações críticas graças à sua portabilidade, segurança e evolução constante. Entender JDK (desenvolvimento), JVM (execução) e JRE (ambiente) é essencial para qualquer desenvolvedor. Comece instalando o JDK, pratique a sintaxe e explore frameworks para criar aplicações poderosas!
Deixo como dica de curso gratuito com certificado de Java básico e intermediário o site da Loiane Groner.
