El orden de uso habitual de los modificadores se menciona en la Especificación del lenguaje Java (y no en la Especificación de la máquina virtual Java), por ejemplo, para los modificadores de clase , encontrará la siguiente definición (extracto):
ClassModifiers:
ClassModifier
ClassModifiers ClassModifier
ClassModifier: one of
Annotation public protected private
abstract static final strictfp
[....]
Si dos o más modificadores de clase (distintos) aparecen en una declaración de clase, entonces es habitual, aunque no obligatorio, que aparezcan en el orden coherente con el que se muestra arriba en la producción de ClassModifier. (¡texto pequeño al final del párrafo!)
Encontrará esta oración en varios otros lugares donde se especifica el uso de modificadores, por ejemplo, aquí para modificadores de campo.
Actualización : reemplacé "especificado / recomendado" por "habitual" para que esta sea una respuesta aceptable. Tenga esto en cuenta si usted lee los comentarios ;-) (gracias @EJP dejar esto claro) - Sin embargo me gustaría recomendar a utilizar el habitual orden.
Google también recomienda utilizar el orden habitual mencionado en la especificación de Java.
public / protected / private
abstract
static
final
transient
volatile
synchronized
native
strictfp
Actualización : Existe una nuevainiciativa de " Pautas de estilo Java " para proyectos en la comunidad OpenJDK. También tiene una recomendación para un orden de modificación y también incluye el nuevomodificador predeterminado de Java 8.
public / private / protected
abstract
static
final
transient
volatile
**default**
synchronized
native
strictfp