Algumas variáveis estáticas devem mudar à medida que o programa é executado. Os contadores são comuns exemplos disso. Queremos que a contagem aumente com o tempo. Assim como nas variáveis de instância, você pode inicializar uma variável estática na linha em que é declarada:
public class Initializers {
private static int counter = 0; // initialization
}
Outras variáveis estáticas devem nunca mudar durante o programa. Esse tipo de variável capaz é conhecido como uma constante . Ele usa o modificador final para garantir que a variável nunca mude. constantes final estáticas usam uma convenção de nomenclatura diferente de outras variáveis. Eles usam todas as letras maiúsculas com sublinhado entre "palavras". Por exemplo:
public class Initializers {
private static final int NUM_BUCKETS = 45;
public static void main(String[] args) {
NUM_BUCKETS = 5; // DOES NOT COMPILE
} }
O compilador garantirá que você não tente acidentalmente atualizar uma variável final. Isso pode ficar interessante. Você acha que o seguinte compila?
private static final ArrayList<String> values = new ArrayList<>();
public static void main(String[] args) {
values.add("changed");
}
Na verdade, compila. values é uma variável de referência. Temos permissão para chamar métodos em variáveis de referência. Tudo o que o compilador pode fazer é verificar se não tentamos reatribuir o valores finais para apontar para um objeto diferente.