Em Consulte Métodos de variável estática Java :
- É uma variável que pertence à classe e não ao objeto (instância)
- Variáveis estáticas são inicializadas apenas uma vez, no início da execução. Essas variáveis serão inicializadas primeiro, antes da inicialização de quaisquer variáveis de instância
- Uma única cópia a ser compartilhada por todas as instâncias da classe
- Uma variável estática pode ser acessada diretamente pelo nome da classe e não precisa de nenhum objeto.
Variáveis de instância e classe (estáticas) são inicializadas automaticamente com os valores padrão padrão se você falhar em inicializá-las propositalmente. Embora as variáveis locais não sejam inicializadas automaticamente, você não pode compilar um programa que falha ao inicializar uma variável local ou atribuir um valor a essa variável local antes de ser usada.
O que o compilador realmente faz é produzir internamente uma única rotina de inicialização de classe que combina todos os inicializadores de variáveis estáticas e todos os blocos inicializadores estáticos de código, na ordem em que aparecem na declaração de classe. Este único procedimento de inicialização é executado automaticamente, apenas uma vez, quando a classe é carregada pela primeira vez.
No caso de classes internas , eles não podem ter campos estáticos
Uma classe interna é uma classe aninhada que não é declarada explícita ou implicitamente static
.
...
As classes internas não podem declarar inicializadores estáticos (§8.7) ou interfaces de membro ...
As classes internas não podem declarar membros estáticos, a menos que sejam variáveis constantes ...
Consulte JLS 8.1.3 Classes internas e instâncias anexas
final
campos em Java podem ser inicializados separadamente de seu local de declaração; entretanto, não pode ser aplicável a static final
campos. Veja o exemplo abaixo.
final class Demo
{
private final int x;
private static final int z;
static
{
z = 10;
}
public Demo(int x)
{
this.x=x;
}
}
Isso ocorre porque há apenas uma cópia das static
variáveis associadas ao tipo, ao invés de uma associada a cada instância do tipo como com as variáveis de instância e se tentarmos inicializar o z
tipo static final
dentro do construtor, ele tentará reinicializar o static final
campo de tipo z
porque o construtor é executado em cada instanciação da classe que não deve ocorrer em final
campos estáticos .