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?
@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.