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 Desenvolvimento
JRE = 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.class
Execute:
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.