Então cara… em Java, você pode ter 3 coisas “static”: blocos de inicialização, variáveis/métodos e classes internas.
Primeiro precisa entender o seguinte. Static é a mesma coisa que “de classe”, e não “de objeto”. Uma classe pode ter vários objetos. Por exemplo:
Carro vectra = new Carro();
Carro palio = new Carro();
Aqui temos apenas uma classe: “Carro”
Mas temos dois objetos: “vectra” e “palio”
Agora que já sabe a diferença entre classe e objeto, fica mais fácil. Static é “de classe”, ou seja, uma variável static da classe Carro teria o mesmo valor para qualquer objeto (vectra, palio, fusca, ferrari…). Tanto que você nem precisa criar objetos pra acessa-las. Ela é usada geralmente para contadores, ver quantos objetos foram criados a partir da classe, ou então para fazer variáveis globais (como vc deve fazer em Delphi).
Se você não coloca static nas variáveis, elas ficam com uma cópia diferente pra cada objeto (o que é o mais usual).
Blocos de inicialização são bloquinhos com coisas que você quer que executem quando a classe for carregada na virtual machine, o que acontece apenas uma vez (nunca precisei usar isso, é só pra saber que existe). Por exemplo:
static {
System.out.println(“O classloader carregou essa classe!!”);
}
E classes internas são classes dentro de classes, que também podem ser static (também nunca precisei usar isso, mas saiba que existe). Por exemplo:
class Externa {
static class interna {
}
}
Espero ter esclarecido cara… abração
fonte: https://www.guj.com.br/t/para-que-serve-a-palavra-static/42731/4