O construtor é o responsável por criar objetos da classe, e sim ele obrigatoriamente tem que ter o nome da classe.
Ao criar um objeto de uma classe, você pode definir valores iniciais através do construtor.
class Conta {
private String nome;
private double valor;
Conta() {
}
Conta(String nome, double valor) {
this.nome = nome ;
this.valor = valor;
}
// getters e setters
}
Por exemplo, se eu quero criar um objeto da classe Conta com o nome "Conta 1" com o valor inicial 250, basta eu passar como parâmetro esse nome e valor para o construtor.
Conta conta = new Conta("Conta 1", 250.0);
Caso eu apenas crie o objeto sem inicializar os valores, mas depois eu queira atribuir um nome e um valor a esse objeto
// Construtor padrão, apenas cria o objeto sem nenhum valor inicial.
Conta conta = new Conta();
// Atribuindo o nome
conta.setNome("Conta1");
// Atribuindo o valor
conta.setValor(250.0);
Como você deve ter percebido fica muito mais fácil você inicializar os valores através do construtor do que ficar setando atributo por atributo.
Você pode ter vários construtores.