Uma coisa que tem que se deixar clara é o que uma constante e o que é uma enumeração.
Constantes são números únicos, como valores matemáticos (PI é um exemplo) ou físicas (Numero de Avogadro) ou então o número de dias de uma semana ou de horas num dia. Isso são constantes, não mudam. Em um sistema eu posso definir valores que são constantes, conforme o tipo da aplicação que estou desenvolvendo. Constantes são basicamente utilizadas para cálculos envolvendo outros números.
Já enumerações são conjuntos de valores utilizados em sistemas para classificação. Por exemplo: eu posso ter uma enumeração com os dias da Semana que poderia ser Semana.SEGUNDA, Semana.TERCA, etc. Enumerações são basicamente utilizadas para classificação de alguma coisa e são muito utilizada em logicas condicionais! No java enumerações são classes e também podem ter métodos e executar ações porém isso normalmente não acontece em outras linguagens como c e pascal.
O problema com java é que, como nas versões anteriores não se tinha a implementação de Enumerações, o pessoal fazia o uso de constantes no seu lugar e claro que isso acarretou em diversos problemas. Com a implementação das enumerações pela linguagem o uso de constantes como enumeração foi considerado uma má pratica porém como o povo exagera, quer abolir todas as constantes e esse não é o caso! Constantes devem ser utilizadas quando isso for apropriado e isso ocorre basicamente quando ela representa um valor numérico, porém elas não devem ser utilizadas quando enumerações são mais adequadas.