Static

Minha dúvida é a seguinte:

public class GestaoPessoas {

	private static Map<Integer, Pessoa> pessoas = new HashMap<Integer, Pessoa>();

	static {
		pessoas.put(1, new Pessoa(1, "Maria"));
		pessoas.put(2, new Pessoa(1, "João"));
		pessoas.put(3, new Pessoa(1, "José"));
	}

}

Porque criar um “método” (se for) somente com a palavra reservada “static” (pertence a classe), sem modificador de acesso, sem retorno, sem nome?

  • Qual o significado?
  • Algum conceito?

@Luccas_Oliveira até onde eu sei, é o bloco inicializador static. Tentei criar um exemplo p/ entender sua utilidade.

class Motor {
    int cilindrada;
    int qtdPistoes;
    double potenciaMotor;
    int numeroDeSerie;
}

class DellReyUmPontoOito{
    private static Motor motor;
    static {
        motor = new Motor();
        motor.cilindrada = 130;
        motor.qtdPistoes = 4;
        motor.potenciaMotor = 1.8;
    }
    
    public DellReyUmPontoOito() {
        motor.numeroDeSerie++;
        System.out.println("Poder: "+motor.cilindrada+" com seu incrivel motor "+motor.potenciaMotor+" Serie:"+motor.numeroDeSerie);
    }
    
    public static int getUltSerieMotor(){
        return motor.numeroDeSerie;
    }
}

class DellReyDoisPontoZero{
    private static Motor motor;
    static {
        motor = new Motor();
        motor.cilindrada = 158;
        motor.qtdPistoes = 4;
        motor.potenciaMotor = 2.0;
    }
    
    public DellReyDoisPontoZero() {
        motor.numeroDeSerie++;
        System.out.println("Poder: "+motor.cilindrada+" com seu incrivel motor "+motor.potenciaMotor+" Serie:"+motor.numeroDeSerie);
    }
    
    public static int getUltSerieMotor(){
        return motor.numeroDeSerie;
    }
}

Execução:

public static void main(String[] args) {
        DellReyUmPontoOito dellRey1 = new DellReyUmPontoOito();
        DellReyUmPontoOito dellRey2 = new DellReyUmPontoOito();
        DellReyDoisPontoZero dellRey3 = new DellReyDoisPontoZero();
        System.out.println("Ultima serie de motor 1.8 :"+dellRey1.getUltSerieMotor());
        System.out.println("Ultima serie de motor 2.0 :"+dellRey3.getUltSerieMotor());
    }

Ou seja no meu exemplo limitamos o número de serie do motor dos DellRey’s entre o 1.8 e o 2.0. E podemos ter esta serie sem a necessidade de instanciar nossa classe(afinal é uma das funcionalidades do static). Desculpa o exemplo não ser mais sucinto e coeso, mas espero que o ajude.

@RaulCrash muito obrigado pelo retorno!

Compreendi a sua lógica no exemplo acima, porém ainda me resta a dúvida sobre esse “tal bloco inicializador”.
É a primeira vez que vejo essa implementação.
Gostaria de saber o porque e em quais momentos/necessidades utilizar o mesmo?
Você possui alguma definição e/ou conceito de tal bloco?

Desde já muito obrigado e em todo caso também farei algumas pesquisas sobre tal, pois definições diferenciadas me ajuda a fazer uma melhor analogia.