¿Cuál es un orden razonable de modificadores de Java (abstracto, final, público, estático, etc.)?

114

¿Cuál es un orden razonable de modificadores de Java?

  • resumen
  • final
  • nativo
  • privado
  • protegido
  • público
  • estático
  • estrictofp
  • sincronizado
  • transitorio
  • volátil

Actualizar

He cambiado la redacción de recomendada a razonable para calmar las discusiones, ya sea que se recomiende la orden o no.

Micha Wiedenmann
fuente
No importa en lo más mínimo, y no debería perder mucho tiempo agonizando por ello. Personalmente, siempre pongo el modificador de acceso primero, pero después de eso ni siquiera puedo decirte qué hago a continuación. Si desea una referencia, pruebe aquí , pero no estoy seguro de que se especifique allí.
Marqués de Lorne
9
Me pregunto por qué esta debería ser una pregunta "no constructiva" (solicitudes cerradas). Puede encontrar la recomendación en la especificación (consulte mi respuesta) y seguir esta recomendación mejorará la legibilidad del código. El analizador de código estático (como SONAR) se quejará si usa un orden diferente.
Viernes
Eché otro vistazo a las convenciones de código Oracle / Sun Java . El asunto ni siquiera se menciona, en el único lugar donde debe buscar y el único lugar donde esperaría que aparezca.
Marqués de Lorne
@EJB Las convenciones del código son de 1999 y deben actualizarse con urgencia. Espero que incluyan este tema si alguna vez vuelven a tocar estas convenciones, ¡ya que es un buen lugar!
Viernes
1
¿Puede Eclipse ordenar los modificadores automáticamente? ¿O al menos dar una advertencia si no están clasificados?
Roland

Respuestas:

126

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
FrVaBe
fuente
1
La pregunta era "¿Cuál es el orden recomendado de modificadores de Java?" y esta pregunta se responde en la Especificación de idioma (y como el orden no es obligatorio, diría que se recomienda en la especificación). La especificación de JVM se trata del formato de archivo de clase y no del código fuente de Java. - De hecho, el orden no importa, pero si sigue una recomendación, su código será más legible para los demás. Entonces creo que esta es una pregunta razonable donde se puede dar una respuesta precisa. Por cierto, el analizador de código estático (por ejemplo, SONAR) se quejará del orden incorrecto.
Viernes
3
La oración 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. ¡ES PARTE DE LA ESPECIFICACIÓN!
Viernes
1
En este caso, quería gritar pero ya me tranquilicé, lo siento mucho ;-) - Tampoco soy nativo, por lo que probablemente tengas razón en la interpretación de idiomas. Lo que solo quería decir con mi respuesta es que hay un lugar muy oficial donde se maneja el orden de los modificadores en el código fuente de Java, y tuve la suerte de encontrar esto cuando me hice la misma pregunta. En mi humilde opinión, no hay mejor lugar para encontrar la respuesta que en la especificación del lenguaje Java.
Viernes
1
@EJP Tiene una opinión firme (~ sin orden recomendado) sobre ese tema. ¿Sería tan amable de proporcionar esto como respuesta? Tengo curiosidad por la votación.
Viernes
28

Es razonable utilizar el pedido de acuerdo con la Especificación de la máquina virtual Java, Tabla 4.4.

  • público
  • protegido
  • privado
  • resumen
  • defecto
  • estático
  • final
  • transitorio
  • volátil
  • sincronizado
  • nativo
  • estrictofp
Micha Wiedenmann
fuente
8
+1 que ves a menudo: "resumen público", "final estático privado", etc. Algunos IDE (por ejemplo, NetBeans) incluso tienen algunos atajos, por ejemplo, "psf" o "Psf"
Puce
1
Puede encontrar el orden recomendado en la Especificación del lenguaje Java (y no en la Especificación de la máquina virtual Java). Eche un vistazo a mi respuesta.
Viernes
1
@FrVaBe No puedes encontrar tal cosa. No confunda las gramáticas del lenguaje con recomendaciones de estilo.
Marqués de Lorne
@Puce: algunos IDE (por ejemplo, IntelliJ IDEA) incluso pueden ordenar correctamente los modificadores.
Mot
5

Basado en sus valores int.

Modificador (Java Platform SE 8)

  • 1: público
  • 2: privado
  • 4: protegido
  • 8: estático
  • 16: final
  • 32: sincronizado
  • 64: volátil
  • 128: transitorio
  • 256: nativo
  • 512: interfaz
  • 1024: abstracto
  • 2048: estrictofp
Sero
fuente
1
esta respuesta no incluye la palabra clave "predeterminado"
Sero
1
¿Qué tienen que ver sus valores int con esto?
Marqués de Lorne
0

Utilizo dos reglas para recordar la secuencia del modificador, pero no incluye el estrictofp, ya que nunca lo uso. FYI.

  1. los nativos sincronizados son las personas menos prioritarias.

  2. PPP AS FTV: PPP {ruido de sonido} AS {viendo} FTV {France TV}.

:)

Houcheng
fuente