A palavra-chave estática (seja uma variável ou bloco) pertence à classe. Portanto, quando a classe é chamada, essas variáveis ou blocos são executados. Portanto, a maior parte da inicialização será feita com a ajuda da palavra-chave estática. Por pertencer à própria classe, a classe pode acessá-la diretamente, sem criar uma instância da classe.
Vamos dar um exemplo, há uma classe de calçados em que existem várias variáveis como cor, tamanho, marca etc ... E aqui se a empresa fabricante de calçados tem apenas uma marca, devemos inicializá-la como uma variável estática. Portanto, quando a classe de calçados é chamada e diferentes tipos de calçados são fabricados (criando uma instância da classe), naquele momento, a cor e o tamanho ocuparão a memória sempre que um novo calçado for criado, mas aqui a marca é uma propriedade comum para todos os calçados, de modo que ocupará a memória uma vez, não importa quantos sapatos sejam fabricados.
Exemplo:
class Shoe {
int size;
String colour;
static String brand = "Nike";
public Shoe(int size, String colour) {
super();
this.size = size;
this.colour = colour;
}
void displayShoe() {
System.out.printf("%-2d %-8s %s %n",size,colour, brand);
}
public static void main(String args[]) {
Shoe s1 = new Shoe(7, "Blue");
Shoe s2 = new Shoe(8, "White");
System.out.println("=================");
s1.displayShoe();
s2.displayShoe();
System.out.println("=================");
}
}