2012-04-24 16 views
34

Cada vez que escribo el método en Java con más palabras clave que public void, cada vez que lo escribo de otra manera. A veces "static public void" a veces "public static void" etc.Modificador Orden de palabras clave en Java

¿Cuál es el mejor orden (mejores prácticas) para estas palabras clave?

[abstract/static] [final] [synchronized] [public/private/protected] [result_type] ???

+0

suena como una cuestión de la mina que lo echaron a http: //programmers.stackexchange.com/... Pero personalmente Yo uso '[public/private/protected] [final/abstract/static] [synchronized] [type] func()' ... –

Respuesta

2

El mejor orden es el que usa el resto de su código.

+4

Sí, pero no se puede negar que 'public static final' es más común que' público final estático'. Hay algunas convenciones no escritas. –

+0

De hecho, hay algunas convenciones bastante claras en Javaland, por ejemplo, nombres de métodos con estilo infixCaps. Vale la pena aprender y seguirlos. – ewernli

1

De esta manera:

public static final synchronized void calculate()

+0

'public static final synchronized void calculate()' ;-) – Betlista

+0

@Betlista - Gracias, hecho :) –

44

En teoría, no importa si usted dice public static final o public static final, pero si sigue la convención habitual, para otras personas será capaz de leer el código sea más fácilmente. Aquí está la orden preferida:

[public | protegido | privada]

estática

abstracta

sincronizada

[transitoria | volátil]

última

nativa

strictfp

[int | largo | Cadena | clase | enum | Interfaz etc.]

+1

http://checkstyle.sourceforge.net/config_modifier.html –

+1

@YoushaAleayoub En las secciones proporcionadas de JLS, no dice nada sobre restricciones de orden, algo así como 'Es un error de tiempo de compilación, si no sigue el orden anterior :) :) –

+4

Creo que el orden de estática y resumen se intercambian de acuerdo con http://docs.oracle.com/javase/specs /jls/se7/html/jls-8.html#jls-8.4.3. Vamos a editarlo ... –

0

Esta es mi elección personal

public static final void method() { } 
public void method() { } 
public abstract void method() { } 

esto parece demasiado de acuerdo con la documentación de Java

3

La "mejor" habría que seguir el Java Coding Style Guide, que los estados en 6.2 (declaración del método):

public static final synchronized long methodName() 
    throws ArithmeticException, InterruptedException { 
    static int count; 
} 
+0

Actualmente, el enlace no apunta a una página útil. solo a la página de inicio de java en java. – CoatedMoose

+1

@CoatedMoose corrigió el enlace – ewernli

0

Sí, hay un pedido estándar.

Si utiliza un IDE, puede configurarlo para dar formato al código para usted, es decir, en Eclipse en Preferencias -> Java -> Editor -> Guardar acciones que puede marcar la casilla "código fuente Formato"

Entonces ya no tiene que preocuparse más por eso. Se realizará automáticamente cada vez que se guarde el archivo y si todo el proyecto lo usa, entonces, para todo el proyecto, el código se formateará de la misma manera.

+0

Esto no reordena los modificadores AFAIK. Consulte https://bugs.eclipse.org/bugs/show_bug.cgi?id=322494 – dforce

1

El orden de uso personalizado de los modificadores se menciona en el Java Language Specification (por lo que no es necesario tener una opinión propia ;-)) p.para method modifiers se encuentra la siguiente definición (extracto):

MethodModifiers: 
    MethodModifier 
    MethodModifiers MethodModifier 

MethodModifier: one of 
    Annotation public protected private abstract 
    static final synchronized native strictfp 

Si dos o más (distintos) modificadores del método aparecen en una declaración de método, es habitual, aunque no se requiere, que aparecen en el orden consistente con lo que se muestra arriba en la producción de MethodModifier.

Encontrará esta oración en varios otros lugares donde se especifica el uso de modificadores, p. here para modificadores de campo.

(Esto se copia principalmente de otra respuesta mía here).

23

Checkstyle (que implementa las sugerencias de las especificaciones secciones Lenguaje Java, 8.1.1, 8.3.1, y 8.4.3) dice:

  1. pública
  2. protegida
  3. privada
  4. abstracta
  5. estática
  6. final
  7. transitoria
  8. volátil
  9. sincronizada
  10. nativa
  11. strictfp
+0

Ésta debe considerarse la respuesta correcta, ya que esta es la orden inferida del JLS. Checkstyle simplemente implementa esto correctamente. – Asturio

+0

Sería bueno tener esta función de eclipse en su lugar: https://bugs.eclipse.org/bugs/show_bug.cgi?id=322494 – dforce