← Blog

Java para Iniciantes: Guia Completo Sem Enrolação

10 de agosto de 2026javainiciantesprogramação

Java existe desde 1995 e continua sendo uma das linguagens mais usadas do mundo. Se você quer trabalhar com Android, sistemas empresariais ou até jogos, Java é um caminho sólido. Mas a maioria dos tutoriais começa com teoria interminável e você acaba desistindo antes de escrever seu primeiro código.

Este guia é diferente. Vou direto ao ponto com exemplos que você pode testar agora mesmo. O foco é fazer você entender a lógica por trás da linguagem e escrever código funcional.

O Primeiro Programa: Entendendo a Estrutura

Todo programa Java precisa de uma classe e um método main. É aqui que tudo começa. Vamos criar um exemplo simples que mostra como funciona a estrutura básica:

public class PrimeiroPrograma {
    public static void main(String[] args) {
        System.out.println("Olá, mundo Java!");
    }
}

Para executar esse código, você precisa salvar o arquivo como PrimeiroPrograma.java e compilar com javac PrimeiroPrograma.java. Depois execute com java PrimeiroPrograma. A saída será "Olá, mundo Java!".

Repare na palavra public — significa que a classe é acessível de qualquer lugar. O static no método main indica que ele pode ser chamado sem criar um objeto da classe. Isso é obrigatório para o ponto de entrada do programa.

Variáveis e Tipos: Os Blocos de Construção

Java é uma linguagem estaticamente tipada. Ou seja, você precisa declarar o tipo de cada variável. Isso pode parecer burocrático, mas evita erros silenciosos que acontecem em outras linguagens.

public class VariaveisJava {
    public static void main(String[] args) {
        int idade = 25;
        double salario = 4500.50;
        String nome = "Maria Silva";
        boolean ativo = true;
        char categoria = 'A';
        
        System.out.println("Nome: " + nome);
        System.out.println("Idade: " + idade);
        System.out.println("Salário: " + salario);
        System.out.println("Ativo: " + ativo);
        System.out.println("Categoria: " + categoria);
    }
}

Os tipos primitivos mais usados são int para números inteiros, double para decimais, boolean para verdadeiro/falso e char para um único caractere. Para textos maiores, usamos a classe String.

Uma dica importante: nomes de variáveis seguem o padrão camelCase no Java. Comece com letra minúscula e use maiúsculas para separar palavras: salarioAnual, dataNascimento, enderecoCompleto.

Controle de Fluxo com If e Else

Tomar decisões é essencial em qualquer programa. O Java usa a mesma sintaxe de muitas outras linguagens, o que facilita a vida de quem já conhece C ou JavaScript.

public class ControleFluxo {
    public static void main(String[] args) {
        int nota = 78;
        
        if (nota >= 90) {
            System.out.println("Excelente! Passou com mérito.");
        } else if (nota >= 60) {
            System.out.println("Aprovado!");
        } else {
            System.out.println("Reprovado. Estude mais!");
        }
        
        // Operador ternário para decisões simples
        String resultado = (nota >= 60) ? "Passou" : "Não passou";
        System.out.println("Resultado: " + resultado);
    }
}

O operador ternário é ótimo para atribuições rápidas, mas cuidado para não exagerar. Se a lógica ficar complexa, prefira o if/else tradicional. Seu código vai ser mais legível.

Laços de Repetição: For, While e Do-While

Programas reais processam dados repetidamente. Java oferece três estruturas de repetição principais. Vou mostrar cada uma com um exemplo prático.

public class LacosRepeticao {
    public static void main(String[] args) {
        // For: quando sabemos quantas vezes repetir
        System.out.println("Contando de 1 a 5:");
        for (int i = 1; i <= 5; i++) {
            System.out.print(i + " ");
        }
        System.out.println();
        
        // While: quando não sabemos quantas vezes
        int tentativa = 0;
        int chute = 0;
        java.util.Random random = new java.util.Random();
        int segredo = random.nextInt(10) + 1;
        
        while (chute != segredo) {
            tentativa++;
            chute = random.nextInt(10) + 1;
            System.out.println("Tentativa " + tentativa + ": " + chute);
        }
        System.out.println("Acertou em " + tentativa + " tentativas!");
        
        // Do-while: executa pelo menos uma vez
        int contador = 10;
        do {
            System.out.println("Contador: " + contador);
            contador -= 3;
        } while (contador > 3);
    }
}

O for é ideal quando você sabe exatamente quantas iterações serão necessárias. O while é perfeito para condições que dependem de fatores externos, como esperar entrada do usuário. Já o do-while garante execução pelo menos uma vez.

Arrays e Coleções: Trabalhando com Dados

Dados raramente existem isolados. Java oferece arrays para coleções de tamanho fixo e ArrayList para listas dinâmicas.

import java.util.ArrayList;
import java.util.List;

public class ArraysJava {
    public static void main(String[] args) {
        // Array tradicional - tamanho fixo
        int[] numeros = {10, 20, 30, 40, 50};
        System.out.println("Segundo número: " + numeros[1]);
        System.out.println("Tamanho do array: " + numeros.length);
        
        // ArrayList - tamanho dinâmico
        List<String> nomes = new ArrayList<>();
        nomes.add("Ana");
        nomes.add("Bruno");
        nomes.add("Carla");
        nomes.add("Diego");
        
        System.out.println("Lista de nomes:");
        for (String nome : nomes) {
            System.out.println("- " + nome);
        }
        
        // Remove um elemento
        nomes.remove("Bruno");
        System.out.println("Após remoção: " + nomes.size() + " nomes restantes");
    }
}

A diferença principal é a flexibilidade. Arrays têm desempenho melhor para tamanhos fixos, enquanto ArrayList cresce conforme necessário. Para a maioria dos casos, prefira ArrayList.

Trabalhando com Orientação a Objetos

Java é uma linguagem orientada a objetos, e isso não é opcional. Saber criar classes e objetos é fundamental. Vou criar um exemplo simples de uma conta bancária.

public class ContaBancaria {
    private String titular;
    private double saldo;
    
    public ContaBancaria(String titular, double saldoInicial) {
        this.titular = titular;
        this.saldo = saldoInicial;
    }
    
    public void depositar(double valor) {
        if (valor > 0) {
            saldo += valor;
            System.out.println("Depósito de R$" + valor + " realizado.");
        }
    }
    
    public boolean sacar(double valor) {
        if (valor > 0 && valor <= saldo) {
            saldo -= valor;
            System.out.println("Saque de R$" + valor + " realizado.");
            return true;
        }
        System.out.println("Saque inválido!");
        return false;
    }
    
    public void exibirSaldo() {
        System.out.println("Titular: " + titular + " | Saldo: R$" + saldo);
    }
}

Agora uma classe principal para testar nossa conta:

public class TesteConta {
    public static void main(String[] args) {
        ContaBancaria conta = new ContaBancaria("João Silva", 1000.00);
        conta.exibirSaldo();
        conta.depositar(500.00);
        conta.sacar(200.00);
        conta.sacar(5000.00); // Vai falhar de propósito