Em Java, construtores são métodos especiais responsáveis por inicializar objetos no momento em que são criados. Eles garantem que cada objeto comece sua vida com um estado válido, evitando valores sem sentido e reduzindo erros.


🔑 O que são Construtores?


🔄 Tipos de Construtores

Ícone Tipo Característica Quando usar
🛠️ No-Args Constructor Sem parâmetros, inicializa com valores padrão Quando você quer criar objetos "básicos"
🎯 All-Args Constructor Recebe parâmetros para inicializar atributos Quando você já tem todos os dados no momento da criação
♻️ Sobrecarga Vários construtores coexistem Para oferecer diferentes formas de criar o objeto

🥷 Exemplo Didático

Criando ninjas com diferentes formas de inicialização:

public class Ninja {
    private String nome;
    private String cla;

    // 🛠️ Construtor sem parâmetros (No-Args)
    public Ninja() {
        this.nome = "Ninja desconhecido";
        this.cla = "Clã desconhecido";
    }

    // 🎯 Construtor com parâmetros (All-Args)
    public Ninja(String nome, String cla) {
        this.nome = nome;
        this.cla = cla;
    }

    public void exibirInfo() {
        System.out.println("Nome: " + nome + ", Clã: " + cla);
    }

    public static void main(String[] args) {
        Ninja ninja1 = new Ninja(); // valores padrão
        Ninja naruto = new Ninja("Naruto Uzumaki", "Uzumaki");
        Ninja sasuke = new Ninja("Sasuke Uchiha", "Uchiha");

        ninja1.exibirInfo();
        naruto.exibirInfo();
        sasuke.exibirInfo();
    }
}


🏯 Exemplo com mais atributos — Criando Hokages

public class Hokage {
    String nome;
    int idade;
    boolean vivo;

    // No-Args
    public Hokage() {}

    // All-Args
    public Hokage(String nome, int idade, boolean vivo) {
        this.nome = nome;
        this.idade = idade;
        this.vivo = vivo;
    }
}

public class Main {
    public static void main(String[] args) {
        Hokage hashirama = new Hokage("Hashirama Senju", 60, false);

        System.out.println("Primeiro Hokage: " + hashirama.nome);
        System.out.println("Idade: " + hashirama.idade + " anos");
        System.out.println("Vivo? " + (hashirama.vivo ? "Sim" : "Não"));
    }
}


♻️ Sobrecarga de Construtores (Constructor Overloading)

A sobrecarga permite criar vários construtores com diferentes assinaturas, oferecendo mais flexibilidade.