A ordem de uso habitual dos modificadores é mencionada na Especificação da linguagem Java (e não na Especificação da máquina virtual Java), por exemplo, para modificadores de classe, você encontrará a seguinte definição (extrato):
ClassModifiers:
ClassModifier
ClassModifiers ClassModifier
ClassModifier: one of
Annotation public protected private
abstract static final strictfp
[....]
Se dois ou mais modificadores de classe (distintos) aparecem em uma declaração de classe, então é comum, embora não obrigatório, que eles apareçam na ordem consistente com aquela mostrada acima na produção para ClassModifier. (pequeno texto na parte inferior do parágrafo!)
Você encontrará esta frase em vários outros lugares onde o uso de modificadores é especificado, por exemplo, aqui para modificadores de campo.
Atualização : substituí "especificado / recomendado" por "habitual" para tornar a resposta aceitável. Leve isso em conta se você ler os comentários ;-) (graças @EJP deixar isso claro) - No entanto eu iria recomendar a usar a habitual ordem.
O Google também recomenda o uso do pedido habitual mencionado nas especificações Java.
public / protected / private
abstract
static
final
transient
volatile
synchronized
native
strictfp
Atualização : há uma novainiciativa de " Diretrizes de estilo Java " para projetos na comunidade OpenJDK. Ele também tem uma recomendação para uma ordem de modificador e também inclui o novomodificador padrão do Java 8.
public / private / protected
abstract
static
final
transient
volatile
**default**
synchronized
native
strictfp